为什么MediaPlayer在android中的应用重新启动状态下停止?

时间:2019-09-27 09:26:37

标签: java android android-mediaplayer

我制作了一个音板应用程序,并且可以运行,但是当我在手机上按主页按钮 当我按下某个按钮使其停止工作(崩溃)时,我单击将应用带回去

private MediaPlayer mp;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mp = MediaPlayer.create(this, R.raw.iaminevitable);

        iaminevitable = (Button) findViewById(R.id.iaminevitable);
        iaminevitable.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mp.start();
            }
        });

 @Override
    protected void onStop() {
        super.onStop();
        if (mp != null) {
            mp.reset();
            mp.release();
            mp = null;
        }

我的错误日志猫=

Process: soundboard.test, PID: 5429
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference
        at soundboard.test.MainActivity$6.onClick(MainActivity.java:96)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        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:5293)
        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:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

4 个答案:

答案 0 :(得分:2)

您是否已授予所需的权限?检查它,然后将更多代码添加到存储中,或者如果问题是活动生命周期,只需添加此代码

@Override
public void onRestart()
{
    super.onRestart();
     recreate();
    finish();
    overridePendingTransition(0, 0);
    startActivity(getIntent());
    overridePendingTransition(0, 0);
}

答案 1 :(得分:0)

当应用程序进入后台时,媒体播放器设置为null,但当活动再次进入前台时(未调用CREATE TABLE TableName AS SELECT l.*, m.Act FROM temp AS l JOIN m ON l.sel = m.com ORDER BY Cod; ,则媒体播放器未重新创建)。 您应该在生命周期的成对回调中处理对象的初始化和销毁​​,例如

  • onCreate()onCreate()

  • onDestroy()onStart()

  • onStop()onResume()

答案 2 :(得分:0)

您应该了解activity lifecycle和音频文件所需的权限。
如果我是你,我将使用以下权限。

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />  

onCreate()中,您应该使用onDestroy()方法进行初始化和销毁​​。检查应用程序进入后台时调用哪种方法。学习。这是指向learn about activity lifecycle的链接。

答案 3 :(得分:0)

如下添加onResume方法

 @Override
        protected void onResume() {
            super.onResume();
            if (mp != null) {
                //if want to start again when open app
                mp.start();

                //play when click button
    //            iaminevitable.setOnClickListener(new View.OnClickListener() {
    //                @Override
    //                public void onClick(View view) {
    //                    mp.start();
    //                }
    //            });
            }
        }
相关问题