应该有字幕控制器已经设置 Mediaplayer 错误 Android [英] Should have subtitle controller already set Mediaplayer error Android
问题描述
每当我播放媒体时,它都会在 DDMS 中显示警告 应该已经设置了字幕控制器
Whenever I play a media, it shows a warning in 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 日志
应该已经设置了字幕控制器
Should have subtitle controller already set
信息/警告 (2, 0)
info/warning (2, 0)
当我在 Google 上搜索时,甚至没有一个主题与之相关.我怎样才能摆脱或禁用它?
When I searched on Google, not even a single topic related to it. How can I get rid of or disable this?
推荐答案
一位开发者最近 为 VideoView 添加了字幕支持.
当 MediaPlayer
开始播放音乐(或其他来源),它会检查是否存在 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.
简短回答:不要在意这个异常".
仍然存在于 棒棒糖、
如果 MediaPlayer
仅用于播放音频文件,并且您确实想在 logcat 中删除这些错误,则下面的代码将 empty SubtitleController
设置为 媒体播放器
.
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;
}
此代码试图从隐藏的 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)
这篇关于应该有字幕控制器已经设置 Mediaplayer 错误 Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!