Фон:
Метод setDataSource (Контекстный контекст, Uri uri, Картазаголовки) был включен в SDK (помечен как @hide) довольно долгое время (по крайней мере, начиная с Froyo 2.2.x, API Level 8), посмотрите историю изменений:
Расширение API: поддержка для необязательного указания карты дополнительных заголовков запроса при указании URI мультимедийных данных, которые должны быть воспроизведены
И не было скрыто и открыто для публики со времен Ice Cream Sandwich 4.0.x, APIУровень 14:
Отображение метода setDataSource MediaPlayer, который принимает необязательные заголовки http для передачи на сервер
Обходной путь:
до Ice Cream Sandwich 4.0.x, API уровня 14, мы можем использовать рефлексию, вызывая этот API скрытия:
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();
... ...