java – 如何使用MediaPlayer setDataSource包含http標頭?
.我的目標api版本小於14,所以相信我不能使用允許標頭檔案的新方法.如何在MediaPlayer請求中包含標題(特別是認證標頭),並且仍然支援較舊的Android裝置?
我的程式碼看起來像:
mediaPlayer.setDataSource(url); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepareAsync();
背景:
方法setDataSource(Context context, Uri uri, Map<String, String> headers) 已經被包括在SDK(標記為@hide)很長一段時間(至少從Froyo 2.2.x,API 8級),請檢視更改歷史記錄:
自從Ice Cream Sandwich 4.0.x,API Level 14:
解決方法:
在Ice Cream Sandwich 4.0.x,API Level 14之前,我們可以使用反射來呼叫這個hide 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(); ... ...
http://stackoverflow.com/questions/8959300/how-do-i-include-http-headers-with-mediaplayer-setdatasource