2013-03-19 6 views
9

Ich baue einen Audiorecorder, der den aufgenommenen Ton wiedergeben muss. Ich habe viel Mühe, den Ton wiederzugeben. Ich weiß, dass die Datei existiert, weil ich sie in einen Ordner auf meiner SD-Karte isoliert habe, aber aus irgendeinem Grund kann sie nicht wiedergegeben werden.Android MediaPlayer vorbereiten fehlgeschlagen: status = 0x1

Hier ist mein Code:

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

Hier sind die Fehler von 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) 

Hoffentlich kann mir jemand dieses Problem zu interpretieren und lösen helfen. Ich habe eine Menge Forschung betrieben, und nichts, was ich tue, hilft mir. Danke :)

+2

In Ihrem Code 'mediaPlayer' Objekt erstellt wird zweimal das heißt einmal außerhalb der Schleifen und dann in' onClick' Funktion. Haben Sie versucht, das 'mediaPlayer'-Objekt vor dem 'getInstance'-Aufruf zu entfernen? – Ganesh

+0

Bitte posten Sie die Datei, die Sie spielen möchten –

+2

Haben Sie in Ihrer Manifest-Datei? –

Antwort

7

dachte ich es aus: dumme Fehler wie gewohnt. Ich habe vergessen, die Berechtigung zum Lesen des externen Speichers hinzuzufügen, und ich habe Vasily für diesen Fix aufgrund Ihres obigen Kommentars zu danken. Die andere Sache war, dass ich GetText() nicht auf meinem Datum TextView aufgerufen habe, so dass es den Dateinamen nicht richtig eingestellt hat.

+0

Können Sie dies bitte als gültige Antwort akzeptieren? Vielen Dank. – shkschneider

3

Ich denke, Sie stehen vor dem Problem aufgrund einer falschen DataSource wird auf Ihre MediaPlayer gesetzt. Können Sie sich bitte versuchen Sie setDataSource mit folgenden Änderung

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

ich mit dieser Änderung denke, soll Ihr Code

EDIT funktionieren: Bitte überprüfen Sie diesen Beitrag MediaPlayer Preparing Failed, um weitere Informationen über den Grund file:// hinter prefixing zu Ihrem Dateinamen.

1

Ich hoffe folgenden Code helfen:

String soundPath = Environment.getExternalStorageDirectory().getPath() + "test/" + date.toString() + ".mp3"; 
mediaPlayer.setDataSource(soundPath);