Cada vez que reproduzco un medio, muestra una advertencia en DDMS. Should have subtitle controller already set
MI CÓDIGO:
private void start() { mediaPlayer.start(); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mp.stop(); mp.release(); } }); }
REGISTRO DDMS
Debería haber configurado el controlador de subtítulos
información / advertencia (2, 0)
Cuando busqué en Google, ni siquiera un tema relacionado con él. ¿Cómo puedo eliminar o desactivar esto?
Un desarrollador agregó recientemente el soporte de subtítulos a VideoView .
Cuando MediaPlayer
comienza a reproducir música (u otra fuente), comprueba si hay un SubtitleController y muestra este mensaje si no está configurado. No parece importarle si la fuente que desea reproducir es una música o video. No estoy seguro de por qué lo hizo.
Respuesta corta: no me importa esta “excepción”.
Editar:
Todavía presente en Lollipop ,
Si MediaPlayer
solo se usa para reproducir archivos de audio y realmente desea eliminar estos errores en el logcat, el código siguiente establece un empty SubtitleController
en el MediaPlayer
.
No debe utilizarse en el entorno de producción y puede tener algunos efectos secundarios.
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; }
Este código intenta hacer lo siguiente desde la API oculta
SubtitleController sc = new SubtitleController(context, null, null); sc.mHandler = new Handler(); mediaplayer.setSubtitleAnchor(sc, null)
Para eliminar el mensaje en logcat, agrego un subtítulo para rastrear. En Windows, haga clic con el botón derecho en la pista -> Propiedad -> Detalles -> inserte un texto en los subtítulos. Hecho 🙂