メディアを再生するたびに、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で検索したとき、それに関連するトピックは1つもありませんでした。これを削除または無効にするにはどうすればよいですか?
最近の開発者 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)
Logcatのメッセージを削除するには、追跡するサブタイトルを追加します。ウィンドウで、トラックを右クリック->プロパティ->詳細->字幕にテキストを挿入します。完了:)