我是新手,所以请让我帮忙,我有一个Android应用程序,有一个按钮播放。点击播放按钮,它将开始播放存储在原始文件夹中的音频,按钮文本被更改为暂停,它将暂停音频,但是当我锁定我的手机时,当我按下按钮解锁后,我收到以下错误。
09-05 09:42:57.749:E / AndroidRuntime(11722):致命异常:主要 09-05 09:42:57.749:E / AndroidRuntime(11722):java.lang.IllegalStateException 09-05 09:42:57.749:E / AndroidRuntime(11722):在android.media.MediaPlayer._pause(Native Method) 09-05 09:42:57.749:E / AndroidRuntime(11722):在android.media.MediaPlayer.pause(MediaPlayer.java:1051) 09-05 09:42:57.749:E / AndroidRuntime(11722):at com.example.demo.DemoActivity $ 1.onClick(DemoActivity.java:57) 09-05 09:42:57.749:E / AndroidRuntime(11722):在android.view.View.performClick(View.java:4204) 09-05 09:42:57.749:E / AndroidRuntime(11722):在android.view.View $ PerformClick.run(View.java:17355) 09-05 09:42:57.749:E / AndroidRuntime(11722):在android.os.Handler.handleCallback(Handler.java:725) 09-05 09:42:57.749:E / AndroidRuntime(11722):在android.os.Handler.dispatchMessage(Handler.java:92) 09-05 09:42:57.749:E / AndroidRuntime(11722):在android.os.Looper.loop(Looper.java:137) 09-05 09:42:57.749:E / AndroidRuntime(11722):在android.app.ActivityThread.main(ActivityThread.java:5041) 09-05 09:42:57.749:E / AndroidRuntime(11722):at java.lang.reflect.Method.invokeNative(Native Method) 09-05 09:42:57.749:E / AndroidRuntime(11722):at java.lang.reflect.Method.invoke(Method.java:511) 09-05 09:42:57.749:E / AndroidRuntime(11722):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 09-05 09:42:57.749:E / AndroidRuntime(11722):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 09-05 09:42:57.749:E / AndroidRuntime(11722):at dalvik.system.NativeStart.main(Native Method)
我的代码如下:
public class DemoActivity extends Activity{
MediaPlayer mp;
public void onCreate(Bundle savedInstanceState) {
mp = MediaPlayer.create(DemoActivity.this,
R.raw.biii);
final Button btn = (Button) findViewById(R.id.btnOk);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (btn.getText().toString().equalsIgnoreCase("play")) {
mp.start();
btn.setText("Pause");
} else if (btn.getText().toString().equalsIgnoreCase("pause")) {
mp.pause();
btn.setText("Play");
}
}
});
}
@Override
public void onPause() {
super.onPause();
mp.release();
}
}
答案 0 :(得分:0)
在onPause
方法中,您正在调用release(),这会将MediaPlayer
置于end
状态。
您需要覆盖onResume
方法并调用MediaPlayer的reset()方法,该方法会将MediaPlayer
置于idle
状态。然后,使用原始文件夹的值调用setDataSource(),将MediaPlayer
置于initialized
状态。致电prepare()以准备MediaPlayer
进行SYNC任务,或致电prepareAsync()进行ASYNC任务。
你应该(真的!)阅读有关MediaPlayer的状态。它拥有自己的cute little diagram。请务必阅读有关活动的信息,因为如果您知道Activity lifecycle的工作原理,您将只能有效地使用MediaPlayer。