2013-08-21 28 views
6

Sto provando a riprodurre un file audio mp3 dalla scheda sd, utilizzando il percorso e il nome file del file audio per ottenere il suo Uri.Android MediaPlayer - errore (1, -4) durante la riproduzione di un brano

Ho un Spinner popolato con i nomi delle tracce memorizzati nella scheda SD. Quando si seleziona un elemento, verrà eseguito il seguente codice:

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

     } 
    }; 

sto ottenendo i seguenti errori:

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) 

Qualcuno ha qualche idea in proposito? Grazie in anticipo :)

+0

è il file multimediale accessibile ed è un formato compatibile (come mp3?) – rydgaze

+0

Sì, è accessibile ed è un file mp3 – Hanady

+0

@Hanady hey sto sviluppando un lettore musicale io stesso ... ti piacerebbe condividere il codice per il tuo equalizzatore? Posso condividere il codice come visualizzo l'immagine dell'artista sullo sfondo dopo averla recuperata da internet ...... –

risposta

11

Amico che ha riposto mP.prepare(); in linea sbagliata è necessario chiamare dopo mP.setDataSource(context, uri); funzione e prima mp.start();

anche non provare a fare diversi casi di MediaPlayer. Creane una e usa la funzione reset() ogni volta prima dell'avvio.

Per ulteriori informazioni, consultare this link.

1

Hai questa autorizzazione in AndroidManifest.xml?

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

No, non l'ho, ma l'ho appena aggiunto e non è cambiato nulla – Hanady

0

Incrociare il nome del file o il percorso del file impostato su .setDataSource(fileName).

o chiamata errata .prepare() (CHIAMATA obbligatoria .setDataSource() before .prepare()). Vedere risposta @ The Little Naruto.