Подтвердить что ты не робот

Должен ли контроллер субтитров уже установить ошибку 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 LOG

Должен иметь уже установленный контроллер субтитров

информация/предупреждение (2, 0)

Когда я искал в Google, даже ни одна тема, связанная с ним. Как я могу избавиться от этого или отключить его?

4b9b3361

Ответ 1

Недавно разработчик добавил поддержку субтитров в VideoView.

Когда MediaPlayer начинает воспроизводить музыку (или другой источник), он проверяет, есть ли SubtitleController и показывает это сообщение, если оно не задано. Кажется, что не волнует, является ли источник, который вы хотите воспроизвести, это музыка или видео. Не уверен, почему он это сделал.

Короткий ответ: Не важно об этом "Исключение".


Изменить:

Все еще присутствует в Lollipop,

Если MediaPlayer используется только для воспроизведения аудиофайлов, и вы действительно хотите удалить эти ошибки в логарифме, в приведенном ниже коде установите 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)

Ответ 2

Чтобы удалить сообщение на logcat, я добавляю субтитры для отслеживания. В окнах щелкните правой кнопкой мыши по дорожке → Свойство → Подробности → вставить текст в субтитры. Сделано:)