release()后如何重新播放MediaPlayer
How to play again MediaPlayer after release()
当我点击 ImageButton
时有声音。但我需要 release()
才能播放所有按钮的声音。但是当我点击按钮两次时,我的应用停止了。
这是我的代码:
ImageButton btnda = (ImageButton) findViewById(MyActivity.this, R.id.daa);
btnda.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final MediaPlayer soundda = MediaPlayer.create(DaftarHuruf.this);
soundda.start();
soundda.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.reset();
mp.release();
}
});
}
});
这里来自android监控错误显示:
07-20 13:32:32.053 25594-25594/com.example.john.lontaraapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.john.lontaraapp, PID: 25594
java.lang.IllegalStateException
at android.media.MediaPlayer._start(Native Method)
at android.media.MediaPlayer.start(MediaPlayer.java:1177)
at com.example.john.lontaraapp.DaftarHuruf.onClick(DaftarHuruf.java:100)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19761)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5253)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:949)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:744)
调用 release()
释放播放器和相关资源。如果你想再玩一次,你应该这样做:soundda = new MediaPlayer();
并再次初始化它...所以设置监听器等等。
只需移动您的
final MediaPlayer soundda = MediaPlayer.create(this, R.raw.da);
在
之前 onClick()
soundda.start();
因此,无论您是否已发布或尚未创建,都需要先创建 MediaPlayer
才能播放它。
也不要使用 this
,而是使用 <YourActivityName>.this
,因为您将在 OnClickListener
中移动代码,并且 this
将被视为 OnClickListener
对象, 你需要一个 Context
对象
当我点击 ImageButton
时有声音。但我需要 release()
才能播放所有按钮的声音。但是当我点击按钮两次时,我的应用停止了。
这是我的代码:
ImageButton btnda = (ImageButton) findViewById(MyActivity.this, R.id.daa);
btnda.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final MediaPlayer soundda = MediaPlayer.create(DaftarHuruf.this);
soundda.start();
soundda.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.reset();
mp.release();
}
});
}
});
这里来自android监控错误显示:
07-20 13:32:32.053 25594-25594/com.example.john.lontaraapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.john.lontaraapp, PID: 25594
java.lang.IllegalStateException
at android.media.MediaPlayer._start(Native Method)
at android.media.MediaPlayer.start(MediaPlayer.java:1177)
at com.example.john.lontaraapp.DaftarHuruf.onClick(DaftarHuruf.java:100)
at android.view.View.performClick(View.java:4756)
at android.view.View$PerformClick.run(View.java:19761)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5253)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:949)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:744)
调用 release()
释放播放器和相关资源。如果你想再玩一次,你应该这样做:soundda = new MediaPlayer();
并再次初始化它...所以设置监听器等等。
只需移动您的
final MediaPlayer soundda = MediaPlayer.create(this, R.raw.da);
在
之前onClick()
soundda.start();
因此,无论您是否已发布或尚未创建,都需要先创建 MediaPlayer
才能播放它。
也不要使用 this
,而是使用 <YourActivityName>.this
,因为您将在 OnClickListener
中移动代码,并且 this
将被视为 OnClickListener
对象, 你需要一个 Context
对象