2013-08-21 91 views
6

我試圖播放SD卡上的mp3音頻文件,使用路徑和音頻文件的文件名來獲取其Uri。Android MediaPlayer - 播放歌曲時出錯(1,-4)

我有一個Spinner填充存儲在SD卡中的曲目名稱。 當選擇了一個項目,下面的代碼會被執行:

final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
OnItemSelectedListener listener = new OnItemSelectedListener(){ 
     @Override 
     public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
      TextView tv = (TextView) selectedItemView; 

      File file = new File(uri.getPath() + "/" + tv.getText().toString()); 
      Log.i(TAG, "------------- PATH : " + file.getAbsolutePath()); 
      Uri uri = Uri.fromFile(file); 
      MediaPlayer mP = new MediaPlayer(); 
      try { 
       mP.setDataSource(context, uri); 

       mP.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mp) { 
         // TODO Auto-generated method stub 
         mp.start(); 

        } 
       }); 

      } catch (IllegalArgumentException e) { 
        e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try { 
       mP.prepare(); 
      } catch (IllegalStateException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
      e.printStackTrace(); 
      } 

     } 
    }; 

我收到以下錯誤:

08-21 16:16:37.099: I/MusicFileActivity(3940): ------------- PATH : /external/audio/media/antazirouka 
08-21 16:16:37.159: W/MediaPlayer(3940): info/warning (1, 26) 
08-21 16:16:37.159: E/MediaPlayer(3940): error (1, -4) 
08-21 16:16:37.159: W/System.err(3940): java.io.IOException: Prepare failed.: status=0x1 
08-21 16:16:37.169: W/System.err(3940):  at android.media.MediaPlayer.prepare(Native Method) 
08-21 16:16:37.169: W/System.err(3940):  at com.example.project.MusicFileActivity$1.onItemSelected(MusicFileActivity.java:84) 
08-21 16:16:37.169: W/System.err(3940):  at android.widget.AdapterView.fireOnSelected(AdapterView.java:871) 
08-21 16:16:37.169: W/System.err(3940):  at android.widget.AdapterView.access$200(AdapterView.java:42) 
08-21 16:16:37.169: W/System.err(3940):  at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:837) 
08-21 16:16:37.169: W/System.err(3940):  at android.os.Handler.handleCallback(Handler.java:587) 
08-21 16:16:37.169: W/System.err(3940):  at android.os.Handler.dispatchMessage(Handler.java:92) 
08-21 16:16:37.169: W/System.err(3940):  at android.os.Looper.loop(Looper.java:123) 
08-21 16:16:37.169: W/System.err(3940):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
08-21 16:16:37.169: W/System.err(3940):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-21 16:16:37.169: W/System.err(3940):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-21 16:16:37.169: W/System.err(3940):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
08-21 16:16:37.169: W/System.err(3940):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
08-21 16:16:37.169: W/System.err(3940):  at dalvik.system.NativeStart.main(Native Method) 

沒有人有任何想法? 在此先感謝:)

+0

是可以訪問的媒體文件,它是一個兼容的格式(如mp3?) – rydgaze

+0

是的,它是可訪問的,它是一個MP3文件 – Hanady

+0

@Hanady嘿,我正在開發一個音樂播放器我​​自己..你想分享的代碼你的均衡器??我可以分享你的代碼如何從互聯網取得它後在後臺顯示藝術家的圖像...... –

回答

11

老兄,你已經把mP.prepare();在錯行 需要後mP.setDataSource(context, uri);功能 稱它爲和mp.start();

之前還沒有嘗試使的MediaPlayer的幾個實例。在啓動之前每次打一個並使用reset()函數。

請參閱this link獲取更多幫助。

1

您是否擁有AndroidManifest.xml中的此權限?

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

不,我沒有,但我只是加了它,沒有任何改變 – Hanady

0

Incrorect文件名或文件路徑設置在.setDataSource(fileName)

或錯誤的電話.prepare()(務必致電.setDataSource() before .prepare())。查看答案@TheLittleNaruto。

相關問題