Pengembang baru-baru ini menambahkan dukungan subtitle ke VideoView .
Ketika MediaPlayer
mulai memainkan musik (atau sumber lain), ia memeriksa apakah ada SubtitleController dan menampilkan pesan ini jika tidak disetel. Sepertinya tidak peduli jika sumber yang ingin Anda putar adalah musik atau video. Tidak yakin mengapa dia melakukan itu.
Jawaban singkatnya: Tidak peduli dengan "Pengecualian" ini.
Edit:
Masih hadir di Lollipop ,
Jika MediaPlayer
hanya digunakan untuk memutar file audio dan Anda benar-benar ingin menghapus kesalahan ini di logcat, kode di bawah ini disetel empty SubtitleController
ke MediaPlayer
.
Ini tidak boleh digunakan dalam lingkungan produksi dan mungkin memiliki beberapa efek samping.
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);
} catch (Exception e) {}
return mediaplayer;
}
Kode ini mencoba melakukan hal berikut dari API tersembunyi
SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)