我正在开发一个需要多个Media Players和onTouchListener的项目。 我想添加CheckBox,如果选中框,则选择循环Mp。但我收到这个错误,我不明白为什么。 这是我的代码:
CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked == true) {
mp1.setLooping(true);
mp2.setLooping(true);
mp3.setLooping(true);
mp4.setLooping(true);
mp5.setLooping(true);
mp6.setLooping(true);
mp7.setLooping(true);
mp8.setLooping(true);
mp9.setLooping(true);
mp10.setLooping(true);
mp11.setLooping(true);
mp12.setLooping(true);
mp13.setLooping(true);
mp14.setLooping(true);
mp15.setLooping(true);
Toast.makeText(MainClass.this, "Looping On",
Toast.LENGTH_SHORT).show();
} else {
mp1.setLooping(false);
mp2.setLooping(false);
mp3.setLooping(false);
mp4.setLooping(false);
mp5.setLooping(false);
mp6.setLooping(false);
mp7.setLooping(false);
mp8.setLooping(false);
mp9.setLooping(false);
mp10.setLooping(false);
mp11.setLooping(false);
mp12.setLooping(false);
mp13.setLooping(false);
mp14.setLooping(false);
mp15.setLooping(false);
Toast.makeText(MainClass.this, "Looping Off",
Toast.LENGTH_SHORT).show();
}
}
});
MP:
if (id == R.id.sound5) {
if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
pressed = true;
mp5 = MediaPlayer.create(MainClass.this, R.raw.item5);
mp5.start();
sound5.setBackgroundResource(R.drawable.button_pressed);
} else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
pressed = false;
mp5.stop();
mp5.release();
sound5.setBackgroundResource(R.drawable.button_normal);
}
07-17 15:41:14.272: W/dalvikvm(16742): threadid=1: thread exiting with uncaught exception (group=0x41a138b0)
07-17 15:41:14.282: E/AndroidRuntime(16742): FATAL EXCEPTION: main
07-17 15:41:14.282: E/AndroidRuntime(16742): java.lang.IllegalStateException
07-17 15:41:14.282: E/AndroidRuntime(16742): at android.media.MediaPlayer.setLooping(Native Method)
07-17 15:41:14.282: E/AndroidRuntime(16742): at soundmaniacs.com.MainClass$1.onCheckedChanged(MainClass.java:96)
07-17 15:41:14.282: E/AndroidRuntime(16742): at android.widget.CompoundButton.setChecked(CompoundButton.java:126)
07-17 15:41:14.282: E/AndroidRuntime(16742): at android.widget.CompoundButton.toggle(CompoundButton.java:87)
07-17 15:41:14.282: E/AndroidRuntime(16742): at android.widget.CompoundButton.performClick(CompoundButton.java:99)
07-17 15:41:14.282: E/AndroidRuntime(16742): at android.view.View$PerformClick.run(View.java:17903)
07-17 15:41:14.282: E/AndroidRuntime(16742): at android.os.Handler.handleCallback(Handler.java:730)
07-17 15:41:14.282: E/AndroidRuntime(16742): at android.os.Handler.dispatchMessage(Handler.java:92)
07-17 15:41:14.282: E/AndroidRuntime(16742): at android.os.Looper.loop(Looper.java:213)
07-17 15:41:14.282: E/AndroidRuntime(16742): at android.app.ActivityThread.main(ActivityThread.java:5225)
07-17 15:41:14.282: E/AndroidRuntime(16742): at java.lang.reflect.Method.invokeNative(Native Method)
07-17 15:41:14.282: E/AndroidRuntime(16742): at java.lang.reflect.Method.invoke(Method.java:525)
07-17 15:41:14.282: E/AndroidRuntime(16742): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
07-17 15:41:14.282: E/AndroidRuntime(16742): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-17 15:41:14.282: E/AndroidRuntime(16742): at dalvik.system.NativeStart.main(Native Method)
第96行是:
mp1.setLooping(true);
有人能告诉我我做错了什么吗?可能是因为Mp没玩?
答案 0 :(得分:0)
您正在获得IllegalStateException
,因为您正在release()
对象上调用MediaPlayer
,这会将其置于 End 状态。当MediaPlayer
达到此状态时,"它将无法再使用,并且无法将其恢复到任何其他状态。"这意味着在播放器上调用setLooping()
将导致上述异常。避免这种情况的最简单方法是删除对release()
的调用。如果您确实希望尽可能释放播放器,为了将使用的资源保持在最低限度,那么您在调用setLooping()
时需要确保播放器重新实例化并处于有效状态。
引用来自docs, here.