Java 崩溃日志:MediaPlayer.setSubtitleAnchor中存在内部错误
经常会看到以下崩溃日志弹出:Java 崩溃日志:MediaPlayer.setSubtitleAnchor中存在内部错误,java,android,crash-reports,Java,Android,Crash Reports,经常会看到以下崩溃日志弹出: java.lang.InternalError: at java.lang.Thread.nativeCreate (Native Method) at java.lang.Thread.start (Thread.java:733) at android.media.MediaPlayer.setSubtitleAnchor (MediaPlayer.java:3039) at android.media.MediaPlayer.scanInte
java.lang.InternalError:
at java.lang.Thread.nativeCreate (Native Method)
at java.lang.Thread.start (Thread.java:733)
at android.media.MediaPlayer.setSubtitleAnchor (MediaPlayer.java:3039)
at android.media.MediaPlayer.scanInternalSubtitleTracks (MediaPlayer.java:3240)
at android.media.MediaPlayer.prepare (MediaPlayer.java:1442)
at android.media.MediaPlayer.create (MediaPlayer.java:1046)
at android.media.MediaPlayer.create (MediaPlayer.java:1012)
...
我调用MediaPlayer。使用上下文/资源参数创建。它对我和95%的用户都很好。有一件事需要注意的是,我确实感到害怕
E/MediaPlayer: Should have subtitle controller already set
日志消息是许多问题的主题。我目前一直在忽略它,就像大多数答案告诉我的那样-但是如果scanInternalSubtitleTracks
正在创建内部错误崩溃,也许我不应该?在媒体播放器android中,在媒体准备好后,播放器开始搜索字幕,在搜索字幕发送而不是崩溃期间发生任何异常。
你应该忽略它,或者你可以使用其他玩家,比如ExoPlayer
case MEDIA_PREPARED:
try {
scanInternalSubtitleTracks();
} catch (RuntimeException e) {
// send error message instead of crashing;
// send error message instead of inlining a call to onError
// to avoid code duplication.
Message msg2 = obtainMessage(
MEDIA_ERROR, MEDIA_ERROR_UNKNOWN, MEDIA_ERROR_UNSUPPORTED, null);
sendMessage(msg2);
}
OnPreparedListener onPreparedListener = mOnPreparedListener;
if (onPreparedListener != null)
onPreparedListener.onPrepared(mMediaPlayer);
return;
在android版本28中,android允许您使用.setOnSubtitleDataListener()
,这可以解决您在android 28上的问题实际上,这应该是一个警告,因为mediaplayer在播放时总是查找附加到媒体的任何字幕,如果不存在,则抛出内部错误。您可以通过播放带有字幕的媒体文件(音频/视频)或将虚拟字幕附加到您的文件来验证此行为。我也只希望看到警告,但此堆栈跟踪显示在我的Android应用程序在播放控制台中记录的“崩溃”下。我的文件只是音频…但我会尝试添加一个虚拟字幕。说得清楚一点,你是说即使这个异常出现在Play Console的“崩溃日志”中,但实际上并没有导致客户设备崩溃?是的,这是真的。这是由android处理的,只是作为崩溃发送给你的carshlytic。嗯,根据这个页面,如果android停止应用程序,它应该只算作“崩溃”。或者我读错了吗?不,你们并没有,但那个并没有崩溃。android将异常处理为RuntimeException并将消息返回给你们。我将这部分代码添加到答案中