屏幕解锁后播放音频时出错

时间:2015-09-11 14:25:41

标签: android

我是新手,所以请让我帮忙,我有一个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();
}
}

1 个答案:

答案 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。