web-dev-qa-db-ja.com

字幕コントローラーには既に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で検索したとき、それに関連するトピックは1つもありませんでした。これを削除または無効にするにはどうすればよいですか?

129
Sai Kiran

最近の開発者 VideoViewに字幕サポートを追加

MediaPlayer が音楽(またはその他のソース)の再生を開始すると、SubtitleControllerがあるかどうかを確認し、設定されていない場合はこのメッセージを表示します。再生したいソースが音楽かビデオかは気にしないようです。なぜ彼がそうしたのか分かりません。

短い答え:この「例外」を気にしないでください。


編集:

Lollipop にまだ存在

MediaPlayerがオーディオファイルの再生にのみ使用され、logcatでこれらのエラーを本当に削除したい場合、以下のコードはempty SubtitleControllerMediaPlayerに設定します。

実稼働環境では使用すべきではなく、副作用がある可能性があります。

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)
179
Hacketo

Logcatのメッセージを削除するには、追跡するサブタイトルを追加します。ウィンドウで、トラックを右クリック->プロパティ->詳細->字幕にテキストを挿入します。完了:)

6
StefanoM5