Sai*_*Sai 133 android android-mediaplayer
每当我播放媒体时,它都会在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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
DDMS日志
应该已经设置了字幕控制器
信息/警告(2,0)
当我在Google上搜索时,甚至没有一个与之相关的主题.我怎样才能摆脱或禁用它?
Hac*_*eto 181
开发人员最近为VideoView添加了字幕支持.
当MediaPlayer开始播放音乐(或其他来源)时,它会检查是否有SubtitleController并显示此消息(如果未设置).它似乎并不关心您要播放的音乐源是音乐还是视频.不知道为什么他这样做.
简短的回答:不关心这个"例外".
编辑:
仍然存在于棒棒糖,
如果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;
}
Run Code Online (Sandbox Code Playgroud)
此代码尝试从隐藏的API执行以下操作
SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98642 次 |
| 最近记录: |