私はメディアコントローラを使用してオーディオを再生するコードを作成しました。私のコードは正常に動作していますが、コードの実行中にいくつかの例外が発生します。オーディオを再生するためのメディアコントローラを作成する方法は?
public class CallHistoryActivity extends Activity implements MediaPlayer.OnPreparedListener, MediaController.MediaPlayerControl{
Button audioPlayer;
private static final String TAG = "AudioPlayer";
public static final String AUDIO_FILE_NAME = "audioFileName";
private MediaPlayer mediaPlayer;
private MediaController mediaController;
private String audioFile;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_call_history);
audioPlayer = (Button)findViewById(R.id.audioPlayer);
}
public void audioplayer(View view)
{
String path =new String(Environment.getExternalStorageDirectory() + "/NewCallLogs/Yaendi Yaendi.mp3 ");
Uri uri = Uri.parse(path);
mediaPlayer = new MediaPlayer();
mediaController = new MediaController(this);
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(String.valueOf(uri));
} catch (IOException e) {
e.printStackTrace();
}
try {
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
public void stopPlayer(View view)
{
mediaPlayer.stop();
mediaController.hide();
mediaPlayer.release();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//the MediaController will hide after 3 seconds - tap the screen to make it appear again
mediaController.show();
return false;
}
//--MediaPlayerControl methods----------------------------------------------------
public void start() {
mediaPlayer.start();
}
public void pause() {
mediaPlayer.pause();
}
public int getDuration() {
return mediaPlayer.getDuration();
}
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
public void seekTo(int i) {
mediaPlayer.seekTo(i);
}
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
public int getBufferPercentage() {
return 0;
}
public boolean canPause() {
return true;
}
public boolean canSeekBackward() {
return true;
}
public boolean canSeekForward() {
return true;
}
@Override
public int getAudioSessionId() {
return 0;
}
//--------------------------------------------------------------------------------
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
Log.d(TAG, "onPrepared");
mediaController.setMediaPlayer((MediaController.MediaPlayerControl) this);
mediaController.setAnchorView(findViewById(R.id.main_audio_view));
handler.post(new Runnable() {
public void run() {
mediaController.setEnabled(true);
mediaController.show();
}
});
}
}
logcatに示す例外は次にメディアコントローラのためのレイアウト設計が
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_audio_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.seyali.newcalllogs.CallHistoryActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/audioPlayer"
android:onClick="audioplayer"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/stopPlaying"
android:onClick="stopPlayer"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Now playing:"
android:textSize="25sp"
android:textStyle="bold"
/>
<TextView
android:id="@+id/now_playing_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:layout_gravity="center"
android:text="Now playing.."
android:textSize="16sp"
android:textStyle="italic"/>
下に表示され
02-20 14:56:42.402 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 46
02-20 14:56:42.412 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 49
02-20 14:56:42.412 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50
02-20 14:56:42.422 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50
02-20 14:56:42.422 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50
02-20 14:56:42.422 21410-21410/com.sey.newcalllogs E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 52
02-20 14:56:45.442 21410-21410/com.sey.newcalllogs E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
02-20 14:56:53.402 21410-21421/com.sey.newcalllogs E/MediaPlayer: error (1, -2147483648)
02-20 14:56:56.072 21410-21421/com.sey.newcalllogs E/MediaPlayer: error (1, -2147483648)
02-20 14:56:57.602 21410-21421/com.sey.newcalllogs E/MediaPlayer: error (1, -2147483648)
02-20 14:56:58.792 21410-21410/com.sey.newcalllogs E/MediaPlayer: stop called in state 0
02-20 14:56:58.792 21410-21410/com.sey.newcalllogs E/MediaPlayer: error (-38, 0)
の下に表示される方法に私を助けてくださいこの例外を克服しました。私はすべての方法を試しましたが、私の問題は解決されませんでした。私を助けてください。
これを参照してくださいを修正教えてください..... https://www.sitepoint.com/a-step-by -step-guide-to-building-an-android-audio-player-app/ –
これを試してみます。 –
その例外を解決する方法を教えてください。 –