Java Android Android.media.PlayerBase.PlaybackDetection回调NullPointerException
我的应用程序仅在vivo手机中崩溃,错误日志如下: java.lang.NullPointerException:尝试调用虚拟方法 上的“java.lang.String android.content.Context.getOpPackageName()” 位于的空对象引用 PlaybackDetectionCallBack(PlayerBase.java:348) 位于android.media.PlayerBase.baseStop(PlayerBase.java:229) android.media.MediaPlayer$2.onCompletion(MediaPlayer.java:3578)位于 MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3351) 位于android.os.Handler.dispatchMessage(Handler.java:106) Looper.loop(Looper.java:192)位于 main(ActivityThread.java:6671)位于 java.lang.reflect.Method.invoke(本机方法)位于 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:818) 我相信这是关于我用来在我的应用程序中播放BGM的Java Android Android.media.PlayerBase.PlaybackDetection回调NullPointerException,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,我的应用程序仅在vivo手机中崩溃,错误日志如下: java.lang.NullPointerException:尝试调用虚拟方法 上的“java.lang.String android.content.Context.getOpPackageName()” 位于的空对象引用 PlaybackDetectionCallBack(PlayerBase.java:348) 位于android.media.PlayerBase.baseStop(PlayerBase.java:229) android
MediaPlayer
但我无法找出这是如何发生的,因为错误堆栈没有检索到我的代码
这是我所有关于玩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();
}
这两个函数位于类AppDelegate extensed Application
中,因此此
应该是应用程序实例
它并不总是崩溃。由于导致问题的手机是某个远方用户的,我几天内都拿不到手机。所以我不确定它会在什么情况下发生,但在任何情况下都不应该发生。我解决了问题 My
MediaPlayer
变量具有初始值new MediaPlayer()
当播放BGM的活动调用onPause()
时,我调用MediaPlayer.pause()
但是调用pause()
到new MediaPlayer()
似乎会在某些设备上导致崩溃,而在其他设备上则是OK
我将初始值更改为null
,并在使用对象时执行null检查。坠机事件再也没有发生过