应该有副标题控制器已经设置媒体播放器的错误的Android [英] Should have subtitle controller already set Mediaplayer error Android
问题描述
在以往我扮演一个媒体它显示了DDMS警告应该有副标题控制器已经设置
When ever i play a media it shows a warning in DDMS Should have subtitle controller already set
我的code
private void start() {
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.stop();
mp.release();
}
});
}
DDMS LOG
DDMS LOG
应该有副标题控制器已经设置
Should have subtitle controller already set
方式/警告(2,0)
当我在谷歌搜索与它,我该如何摆脱或禁用此甚至不是一个单独的线程?
When i search on Google not even a single thread relating to it, How can i get rid or disable this ?
推荐答案
在<一个href="https://android.googlesource.com/platform/frameworks/base/+/android-cts-4.4_r1/media/java/android/media/MediaPlayer.java"><$c$c>MediaPlayer$c$c>开始播放音乐(或其他来源),它会检查是否存在SubtitleController,并显示该消息,如果它没有设置。 它似乎并不关心,如果你要播放的来源是一个音乐或视频。不知道他为什么这样做。
When the MediaPlayer
starts playing a music (or other source), it checks if there is a SubtitleController and shows this message if it's not set.
It doesn't seem to care about if the source you want to play is a music or video. Not sure why he did that.
简短的回答:不关心这个异常
编辑:
不过美元的<为p $ psent href="https://android.googlesource.com/platform/frameworks/base/+/lollipop-release/media/java/android/media/MediaPlayer.java#2033">Lollipop,
如果的MediaPlayer
只用来播放音频文件和你真的想在logcat中删除这些错误,code波纹管设置空SubtitleController
到的MediaPlayer
。
If MediaPlayer
is only used to play audio files and you really want to remove these errors in the logcat, the code bellow set an empty SubtitleController
to the 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;
}
这code是试图做从隐藏API以下
This code is trying to do the following from the hidden API
SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)
这篇关于应该有副标题控制器已经设置媒体播放器的错误的Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!