1. 程式人生 > >MediaPlayer播放線上MP3資源時報出java.io.IOException: Prepare failed.: status=0x1異常

MediaPlayer播放線上MP3資源時報出java.io.IOException: Prepare failed.: status=0x1異常

前記:有個需求是我要播放線上的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; }