Ответ 1
Справочная информация:
Метод setDataSource (контекст контекста, заголовки Uri uri, Map < String, String > ) включен в SDK (помечен как @hide) для довольно (по крайней мере, начиная с Froyo 2.2.x, API уровня 8), проверьте историю изменений:
И не был открыт и открыт для публики, так как Ice Cream Sandwich 4.0.x, API Level 14:
Обход проблемы:
До Ice Cream Sandwich 4.0.x, API-уровень 14, мы можем использовать вызов отражения этого API-интерфейса hide:
Uri uri = Uri.parse(path);
Map<String, String> headers = new HashMap<String, String>();
headers.put("key1", "value1");
headers.put("key2", "value2");
mMediaPlayer = new MediaPlayer();
// Use java reflection call the hide API:
Method method = mMediaPlayer.getClass().getMethod("setDataSource", new Class[] { Context.class, Uri.class, Map.class });
method.invoke(mMediaPlayer, new Object[] {this, uri, headers});
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.prepareAsync();
... ...