MediaPlayer播放線上MP3資源時報出java.io.IOException: Prepare failed.: status=0x1異常
阿新 • • 發佈:2019-01-02
前記:有個需求是我要播放線上的mp3音訊資源,路徑什麼都是對的,我把路徑放到瀏覽器,也能正常播放。但是用MediaPlayer播放該線上MP3資源時,在執行mediaPlayer.prepare();時報出
java.io.IOException: Prepare failed.: status=0x1異常
播放資源:
/小學數學3年級應用題/3/audio/OWFhNzg5YzAtMzI3NC00MjllLWI5MmEtYzBiOTUyNDNhYTU2.mp3
原因:
傳入mediaPlayer.prepare()中的資源路徑不能存在漢字,但是又不能對整個資源路徑進行URL編碼,整體URL編碼仍然報出同樣的錯誤。
解決方案:
用正則表示式挑揀出資源路徑中所有的漢字,然後對漢字逐個進行URL編碼,然後用編過碼的漢字代替資源中的漢字。然後再去播放。問題解決。
程式碼如下:
String gradeChineseStr = RegularUtils.getChinese(src);
String[] arr = new String[gradeChineseStr.length()];
String decodeSrc = src;
for(int i = 0; i < gradeChineseStr.length(); i++){
arr[i] = gradeChineseStr.substring(i, i+1 );
String gradeStr = URLEncoder.encode(arr[i]);
decodeSrc = decodeSrc.replace(arr[i],gradeStr);
}
mediaPlayer.setDataSource(decodeSrc);
正則表示式找出所有的漢字:
/**
* 將paramValue中的漢字提取出來
* @param paramValue
* @return
*/
public static String getChinese (String paramValue) {
String str = "";
String regex = "([\u4e00-\u9fa5]+)";
Matcher matcher = Pattern.compile(regex).matcher(paramValue);
while (matcher.find()) {
str += matcher.group(0);
}
return str;
}