Một nhà phát triển gần đây đã thêm hỗ trợ phụ đề cho VideoView .
Khi MediaPlayer
bắt đầu phát nhạc (hoặc nguồn khác), nó sẽ kiểm tra xem có SubtitleContoder hay không và hiển thị thông báo này nếu nó không được đặt. Dường như không quan tâm đến việc nguồn bạn muốn phát là nhạc hay video. Không chắc chắn tại sao anh ta làm điều đó.
Câu trả lời ngắn: Đừng quan tâm đến "Ngoại lệ" này.
Biên tập :
Vẫn hiện diện trong Lollipop ,
Nếu MediaPlayer
chỉ được sử dụng để chơi các file âm thanh và bạn thực sự muốn loại bỏ những sai sót trong logcat, mã dưới đây thiết lập một empty SubtitleController
đến MediaPlayer
.
Nó không nên được sử dụng trong môi trường sản xuất và có thể có một số tác dụng phụ.
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;
}
Mã này đang cố thực hiện các thao tác sau từ API ẩn
SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)