미디어를 재생할 때마다 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 로그
자막 컨트롤러가 이미 설정되어 있어야합니다
정보 / 경고 (2, 0)
Google에서 검색 할 때 관련 주제가 하나도 없었습니다. 이를 제거하거나 비활성화하려면 어떻게해야합니까?
답변
개발자는 최근 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)
답변
logcat에서 메시지를 제거하려면 추적 할 자막을 추가하십시오. 창에서 트랙-> 속성-> 세부 정보-> 자막에 텍스트를 마우스 오른쪽 버튼으로 클릭하십시오. 완료 🙂
답변
또한 설정 해제 mediaPlayer.reset()
및 onDestroy
해제 만 가능합니다.