Sollte der Untertitel-Controller bereits den Mediaplayer-Fehler Android eingestellt haben

137

Immer wenn ich ein Medium abspiele, wird in DDMS eine Warnung angezeigt Should have subtitle controller already set

MEIN CODE:

private void start() {
    mediaPlayer.start();

        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.stop();
            mp.release();
        }
    });
}

DDMS-LOG

Sollte den Untertitel-Controller bereits eingestellt haben

Info / Warnung (2, 0)

Als ich bei Google gesucht habe, hat sich nicht einmal ein einziges Thema darauf bezogen. Wie kann ich dies entfernen oder deaktivieren?

Sai
quelle

Antworten:

187

Ein Entwickler hat VideoView kürzlich um Untertitelunterstützung erweitert .

Wenn der MediaPlayerbeginnt, eine Musik (oder eine andere Quelle) abzuspielen, prüft er, ob ein SubtitleController vorhanden ist, und zeigt diese Meldung an, wenn er nicht eingestellt ist. Es scheint nicht wichtig zu sein, ob die Quelle, die Sie abspielen möchten, Musik oder Video ist. Ich bin mir nicht sicher, warum er das getan hat.

Kurze Antwort: Kümmere dich nicht um diese "Ausnahme".


Bearbeiten:

Immer noch in Lollipop vorhanden ,

Wenn MediaPlayernur Audiodateien abgespielt werden und Sie diese Fehler wirklich im Logcat entfernen möchten, setzen Sie den folgenden Code empty SubtitleControllerauf MediaPlayer.

Es sollte nicht in Produktionsumgebungen verwendet werden und kann einige Nebenwirkungen haben.

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;
}

Dieser Code versucht, über die versteckte API Folgendes auszuführen

SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)
Hacketo
quelle
12
Ich stimme zu - es ist kein Fehler, wenn keine Untertitelspur vorhanden ist. Höchstens informativ.
Jemand irgendwo
4
ok, klar, aber gibt es eine einfache Möglichkeit, es zu unterdrücken? Es verschmutzt meine Logcat-Ausgabe ...
TJ Ellis
Kann einen Filter machen, denke ich, wenn es wirklich nervig ist, Android neu kompilieren oder einen leeren SubtitleController für dein Lied einstellen.
Hacketo
1
@Hacketo Wie setzt man einen leeren SubtitleController? Entschuldigung, ich sehe das nicht in den Dokumenten.
Frank Schwieterman
2
Natürlich enthält die Dokumentation diese Informationen nicht. Wenn Sie den vom MediaPlayer freigegebenen Code gesehen haben, können Sie sehen, dass es einen Setter für den SubtitleController gibt (dies sollte also möglich sein), der jedoch leider nicht verfügbar zu sein scheint.
Hacketo
8

Um die Nachricht auf logcat zu entfernen, füge ich einen Untertitel zum Verfolgen hinzu. Klicken Sie unter Windows mit der rechten Maustaste auf Spur -> Eigenschaft -> Details -> fügen Sie einen Text in den Untertitel ein. Getan :)

StefanoM5
quelle
Einige Gedanken dazu: 1) Das Ändern der Quelldatei ist in vielen Situationen nicht wirklich möglich. 2) Sie haben nicht erklärt, warum das Hinzufügen einer Untertitelspur einen Fehler auf einem Untertitel-Controller im MediaPlayer beheben würde.
Travis Castillo
Der Fehler ist "Sollte der Untertitel-Controller bereits eingestellt sein", daher füge ich einen Untertitel zum Verfolgen hinzu, um diese Fehlermeldung zu vermeiden.
StefanoM5
Untertitel oder Untertitel-Controller. Wollen Sie damit sagen, dass der Media Player durch einen Untertiteltrack in einem Video automatisch einen Controller generiert?
Travis Castillo
0

Außerdem können Sie es nur einstellen mediaPlayer.reset()und onDestroyeinstellen, um es freizugeben.

Faizan Khan
quelle