Android android.media.PlayerBase.PlaybackDetectionCallBack NullPointerException

Android android.media.PlayerBase.PlaybackDetectionCallBack NullPointerException

我的应用程序仅在体内崩溃 phones,错误日志是这样的:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getOpPackageName()' on a null object reference at android.media.PlayerBase.PlaybackDetectionCallBack(PlayerBase.java:348) at android.media.PlayerBase.baseStop(PlayerBase.java:229) at android.media.MediaPlayer.onCompletion(MediaPlayer.java:3578) at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3351) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:192) at android.app.ActivityThread.main(ActivityThread.java:6671) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:818)

我相信这是关于 MediaPlayer 我用来在我的应用程序中播放 BGM 的东西。

但我不知道这是怎么发生的,因为错误堆栈没有检索到我的代码。

这是我所有关于播放 BGM 的代码。

public void playBgm(final int resId, boolean restartIfSame) {
    if(resId == currentBgmRes && !restartIfSame) {
        if(!bgmPlayer.isPlaying()) {
            bgmPlayer.start();
        }
        return;
    }
    if(bgmPlayer.isPlaying()) {
        bgmPlayer.stop();
    }
    _playBgm(resId);
}

private void _playBgm(int resId) {
    bgmPlayer.release();
    bgmPlayer = MediaPlayer.create(this, resId);
    bgmPlayer.setLooping(true);
    currentBgmRes = resId;
    bgmPlayer.start();
}

两个函数都在class AppDelegate extends Application里面,所以this应该是应用实例

它并不总是崩溃。由于导致问题的 phone 是一些远方用户的,所以几天后我无法获得 phone 。所以我不确定它会在什么情况下发生,但在任何情况下都不应该发生。

我找到问题了。

我的 MediaPlayer 变量有一个初始值 new MediaPlayer()

当播放BGM的ActivityonPause()时,我叫MediaPlayer.pause()

但是调用 pause()new MediaPlayer() 似乎会导致某些设备崩溃,而在其他设备上正常。

我将初始值更改为null,并在每次使用该对象时进行空检查。崩溃再也不会发生了。