2013-03-19 36 views
9

Tôi đang xây dựng một máy ghi âm cần phát lại âm thanh đã ghi. Tôi đang gặp rất nhiều rắc rối khi phát lại âm thanh. Tôi biết rằng các tập tin tồn tại bởi vì tôi bị cô lập nó vào một thư mục trên thẻ SD của tôi, nhưng đối với một số lý do nó không thể chơi nó trở lại.Chuẩn bị Android MediaPlayer không thành công: status = 0x1

Đây là mã của tôi:

public class RecorderEditActivity extends SherlockActivity implements 
    DatabaseHelper.MetadataListener { 

private long position; 

private Button playButton = null; 
private TextView date = null; 
private EditText title = null; 
private EditText notes = null; 
private Button saveButton = null; 

private MediaPlayer mediaPlayer = null; 
private boolean isPlaying = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.edit_item); 

    position = getIntent().getExtras().getLong(DatabaseHelper.KEY_ROWID); 

    playButton = (Button) findViewById(R.id.play); 
    date = (TextView) findViewById(R.id.recording_date); 
    title = (EditText) findViewById(R.id.edit_title); 
    notes = (EditText) findViewById(R.id.edit_notes); 
    saveButton = (Button) findViewById(R.id.save_edit_button); 

    mediaPlayer = new MediaPlayer(); 

    DatabaseHelper.getInstance(getApplicationContext()).getMetadataAsync(
      position, this); 

    playButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!isPlaying) { 
       playButton.setText(R.string.stop_text); 
       try { 
        mediaPlayer = new MediaPlayer(); 
        mediaPlayer 
          .setDataSource("sdcard/test/" 
            + date.toString() + ".3gp"); 
        mediaPlayer.prepare(); 
        mediaPlayer.start(); 
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
         @Override 
         public void onCompletion(MediaPlayer mp) { 
          mp.stop(); 
         } 
        }); 
       } catch (Exception e) { 
        Log.e(e.getClass().getName(), e.getMessage(), e); 
       } 
      } else { 
       playButton.setText(R.string.play_text); 
       mediaPlayer.release(); 
      } 
      isPlaying = !isPlaying; 
     } 
    }); 

Dưới đây là các lỗi từ LogCat:

03-20 00:33:40.963: E/MediaPlayer(21268): error (1, -2147483648) 
03-20 00:33:40.963: E/java.io.IOException(21268): Prepare failed.: status=0x1 
03-20 00:33:40.963: E/java.io.IOException(21268): java.io.IOException: Prepare failed.: status=0x1 
03-20 00:33:40.963: E/java.io.IOException(21268): at android.media.MediaPlayer.prepare(Native Method) 
03-20 00:33:40.963: E/java.io.IOException(21268): at com.packagename.soundrecorder.RecorderEditActivity$1.onClick(RecorderEditActivity.java:56) 
03-20 00:33:40.963: E/java.io.IOException(21268): at android.view.View.performClick(View.java:4204) 
03-20 00:33:40.963: E/java.io.IOException(21268): at android.view.View$PerformClick.run(View.java:17355) 
03-20 00:33:40.963: E/java.io.IOException(21268): at android.os.Handler.handleCallback(Handler.java:725) 
03-20 00:33:40.963: E/java.io.IOException(21268): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-20 00:33:40.963: E/java.io.IOException(21268): at android.os.Looper.loop(Looper.java:137) 
03-20 00:33:40.963: E/java.io.IOException(21268): at android.app.ActivityThread.main(ActivityThread.java:5041) 
03-20 00:33:40.963: E/java.io.IOException(21268): at java.lang.reflect.Method.invokeNative(Native Method) 
03-20 00:33:40.963: E/java.io.IOException(21268): at java.lang.reflect.Method.invoke(Method.java:511) 
03-20 00:33:40.963: E/java.io.IOException(21268): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
03-20 00:33:40.963: E/java.io.IOException(21268): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
03-20 00:33:40.963: E/java.io.IOException(21268): at dalvik.system.NativeStart.main(Native Method) 

Hy vọng rằng ai đó có thể giúp tôi giải thích và giải quyết vấn đề này. Tôi đã thực hiện rất nhiều nghiên cứu và không có gì tôi giúp. Cảm ơn :)

+2

Trong mã của bạn 'đối tượng mediaPlayer' đang được tạo hai lần ví dụ: một lần bên ngoài vòng lặp và sau đó trong' chức năng onClick'. Bạn đã thử xóa đối tượng 'mediaPlayer' trước cuộc gọi' getInstance' chưa? – Ganesh

+0

vui lòng đăng tệp bạn đang cố gắng phát –

+2

bạn có trong tệp kê khai của bạn không? –

Trả lời

7

Tôi đã tìm ra: Lỗi lầm thường lệ. Tôi quên thêm quyền đọc bộ nhớ ngoài, và tôi đã Vasily cảm ơn vì sự sửa lỗi đó vì nhận xét của bạn ở trên. Điều khác là tôi đã không gọi getText() trên TextView ngày của tôi để nó không đúng cách đặt tên tệp.

+0

Bạn có thể chấp nhận điều này làm câu trả lời hợp lệ được không. Cảm ơn. – shkschneider

3

Tôi nghĩ bạn đang gặp sự cố do không chính xác DataSource được đặt thành MediaPlayer. bạn có thể xin vui lòng thử setDataSource của bạn với sự thay đổi sau

mediaPlayer.setDataSource("file://sdcard/test/" 
      + date.toString() + ".3gp"); 

Tôi nghĩ rằng với sự thay đổi này, mã của bạn sẽ làm việc tốt

EDIT: Vui lòng kiểm tra bài này MediaPlayer Preparing Failed để biết thêm chi tiết về lý do đằng sau tiền tố file:// vào tên tệp của bạn.

1

Tôi hy vọng mã sau đây sẽ giúp:

String soundPath = Environment.getExternalStorageDirectory().getPath() + "test/" + date.toString() + ".mp3"; 
mediaPlayer.setDataSource(soundPath); 
Các vấn đề liên quan