2013-08-21 36 views
6

Tôi đang cố gắng phát tệp âm thanh mp3 từ thẻ sd, sử dụng đường dẫn và tên tệp của tệp âm thanh để tải Uri.Android MediaPlayer - lỗi (1, -4) khi phát một bài hát

Tôi có một số Spinner được điền bằng tên bản nhạc được lưu trữ trong thẻ sd. Khi một mục được chọn, các mã sau đây sẽ được thực hiện:

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(); 
      } 

     } 
    }; 

Tôi nhận được các lỗi sau đây:

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) 

Có ai có bất kỳ ý tưởng về nó? Cảm ơn bạn trước :)

+0

là tệp phương tiện có thể truy cập được và có phải là định dạng tương thích (như mp3?) – rydgaze

+0

Có, nó có thể truy cập được và đó là tệp mp3 – Hanady

+0

@Hanady hey tôi đang phát triển trình phát nhạc..bạn có muốn chia sẻ mã cho bạn có thể chia sẻ cho bạn mã như thế nào tôi hiển thị hình ảnh của nghệ sĩ trong nền sau khi lấy nó từ internet ...... –

Trả lời

11

Dude bạn đã đặt mP.prepare(); tại dòng sai bạn cần phải gọi nó là sau mP.setDataSource(context, uri); chức năng và trước mp.start();

Cũng không cố gắng để thực hiện một số trường hợp MediaPlayer. Thực hiện một và sử dụng đặt lại() hoạt động mọi lúc trước khi bắt đầu.

Vui lòng xem this link để được trợ giúp thêm.

1

Bạn có quyền này trong AndroidManifest.xml không?

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

Không, tôi chỉ cần thêm nó và không có gì thay đổi – Hanady

0

Tên tệp hoặc đường dẫn đến tệp được đặt trong .setDataSource(fileName).

Hoặc gọi sai .prepare() (PHẢI GỌI .setDataSource() before .prepare()) .Xem câu trả lời @TheLittleNaruto.

Các vấn đề liên quan