应该有字幕控制器已经设置Mediaplayer错误Android
每当我播放一个媒体,它在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日志
应该有字幕控制器已经设置
信息/警告(2,0)
当我在Google上search时,甚至没有涉及到它的单一主题。 我怎样才能摆脱或禁用这个?
一位开发者最近为VideoView添加了字幕支持 。
当MediaPlayer
开始播放音乐(或其他来源)时,它会检查是否存在SubtitleController,如果未设置则显示此消息。 它似乎并不关心你想播放的源是音乐还是video。 不知道他为什么这样做。
简短的回答:不关心这个“例外”。
编辑:
依然存在于棒棒糖 ,
如果MediaPlayer
仅用于播放audio文件,并且您确实希望在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)
要删除logcat上的消息,我添加了一个字幕来跟踪。 在窗口上,右键单击轨道 – >属性 – >详细信息 – >在字幕上插入文本。 完成:)