Как включить заголовки http с MediaPlayer setDataSource?

Я передаю URI методу setDataSource объекта MediaPlayer. Я нацелен на версию api менее 14, поэтому считаю, что я не могу использовать новый метод, который позволяет включать заголовки. Как включить заголовки (в частности, заголовок проверки подлинности) с запросом MediaPlayer и поддерживать старые устройства Android?

Мой код выглядит так:

 mediaPlayer.setDataSource(url);
 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
 mediaPlayer.prepareAsync();

Ответы

Ответ 1

Справочная информация:

Метод setDataSource (контекст контекста, заголовки Uri uri, Map < String, String > ) включен в SDK (помечен как @hide) для довольно (по крайней мере, начиная с Froyo 2.2.x, API уровня 8), проверьте историю изменений:

Расширение API: поддержка необязательного указания карты дополнительных заголовков запросов при указании uri медиафайлов для воспроизведения

И не был открыт и открыт для публики, так как Ice Cream Sandwich 4.0.x, API Level 14:

Включить метод setDataSource, содержащий необязательные заголовки http, которые будут переданы на сервер

Обход проблемы:

До 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();

... ...