개발자는 최근 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)