एक डेवलपर ने हाल ही में VideoView में उपशीर्षक समर्थन जोड़ा ।
जब MediaPlayer
कोई संगीत (या अन्य स्रोत) बजाना शुरू करता है, तो यह जांचता है कि क्या सबटाइटलकंट्रोलर है और यह संदेश सेट नहीं होने पर दिखाता है। यह परवाह नहीं करता है कि अगर आप जिस स्रोत को चलाना चाहते हैं वह संगीत या वीडियो है। निश्चित नहीं कि उसने ऐसा क्यों किया।
संक्षिप्त उत्तर: इस "अपवाद" की परवाह न करें।
संपादित करें:
लॉलीपॉप में अभी भी मौजूद है ,
यदि MediaPlayer
केवल ऑडियो फ़ाइलों को चलाने के लिए उपयोग किया जाता है और आप वास्तव में logcat में इन त्रुटियों को दूर करना चाहते हैं, तो कोड bellow सेट 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;
}
यह कोड छिपे हुए एपीआई से निम्नलिखित करने की कोशिश कर रहा है
SubtitleController sc = new SubtitleController(context, null, null);
sc.mHandler = new Handler();
mediaplayer.setSubtitleAnchor(sc, null)