Должен иметь контроллер субтитров уже установлен 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, даже не одна тема, связанная с ним. Как я могу избавиться или отключить это?
2 ответа:
разработчик недавно добавлена поддержка субтитров для VideoView.
когда
MediaPlayer
начинает воспроизведение музыки (или другого источника), он проверяет, есть ли SubtitleController и показывает это сообщение, если оно не установлено. Кажется, его не волнует, является ли источник, который вы хотите воспроизвести, музыкой или видео. Не знаю, зачем он это сделал.короткий ответ: не волнует это "исключение".
изменить :
все еще присутствует в чупа-чупс,
если
MediaPlayer
используется только для воспроизведения аудио файлов и вы действительно хотите удалить эти ошибки в logcat и код ниже установите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)