每当我播放媒体时,它都会在DDMS Should have subtitle controller already set
我的代码:
private void start() {
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.stop();
mp.release();
}
});
}
DDMS日志
应该已经设置了字幕控制器
info / warning(2,0)
当我在Google上搜索时,甚至没有一个与之相关的主题。我怎样摆脱或禁用它?
答案 0 :(得分:179)
最近开发人员added subtitle support to VideoView。
当MediaPlayer
开始播放音乐(或其他来源)时,它会检查是否有SubtitleController并显示此消息(如果未设置)。
它似乎并不关心您要播放的音乐源是音乐还是视频。不知道他为什么那样做。
简答:不关心这个“例外”。
修改:
仍然存在于Lollipop,
如果MediaPlayer
仅用于播放音频文件,而您确实想要在logcat中删除这些错误,则代码会将empty SubtitleController
设置为MediaPlayer
。
不应在生产环境中使用,可能会产生一些副作用。
static MediaPlayer getMediaPlayer(Context context){
MediaPlayer mediaplayer = new MediaPlayer();
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) {
return mediaplayer;
}
try {
Class<?> cMediaTimeProvider = Class.forName( "android.media.MediaTimeProvider" );
Class<?> cSubtitleController = Class.forName( "android.media.SubtitleController" );
Class<?> iSubtitleControllerAnchor = Class.forName( "android.media.SubtitleController$Anchor" );
Class<?> iSubtitleControllerListener = Class.forName( "android.media.SubtitleController$Listener" );
Constructor constructor = cSubtitleController.getConstructor(new Class[]{Context.class, cMediaTimeProvider, iSubtitleControllerListener});
Object subtitleInstance = constructor.newInstance(context, null, null);
Field f = cSubtitleController.getDeclaredField("mHandler");
f.setAccessible(true);
try {
f.set(subtitleInstance, new Handler());
}
catch (IllegalAccessException e) {return mediaplayer;}
finally {
f.setAccessible(false);
}
Method setsubtitleanchor = mediaplayer.getClass().getMethod("setSubtitleAnchor", cSubtitleController, iSubtitleControllerAnchor);
setsubtitleanchor.invoke(mediaplayer, subtitleInstance, null);
//Log.e("", "subtitle is setted :p");
} catch (Exception e) {}
return mediaplayer;
}
此代码尝试从隐藏的API
执行以下操作SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)
答案 1 :(得分:6)
要删除logcat上的消息,我添加一个字幕进行跟踪。 在Windows上,右键单击轨道 - &gt;财产 - &gt;详细信息 - &gt;在副标题上插入文字。 完成:))
答案 2 :(得分:0)
此外,您只能设置mediaPlayer.reset()
,并在onDestroy
中将其设置为释放。