Ein Entwickler hat VideoView kürzlich um Untertitelunterstützung erweitert .
Wenn der MediaPlayer
beginnt, 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 MediaPlayer
nur Audiodateien abgespielt werden und Sie diese Fehler wirklich im Logcat entfernen möchten, setzen Sie den folgenden Code empty SubtitleController
auf 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)