2017-07-06 2 views
0

Je crée une instance MediaPlayer dans la méthode onCreate de MainActivity() comme celui-ciAndroid MediaPlayer erreur inconnue

MediaPlayer mPlayer = MediaPlayer.create(this, Uri.fromFile(new File("/storage/emulated/0/soundrecorder/My recording #26.wav"))); 

Il est créé avec succès, mais je reçois cette erreur:

07-06 18:33:44.266 18366-18366/com.audiorecorder.wel.voicerecorder E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0 
07-06 18:33:44.267 18366-18366/com.audiorecorder.wel.voicerecorder E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0 

aussi essayé cela, mais la même erreur sur logcat:

MediaPlayer mp = new MediaPlayer(); 
    try { 
     mp.setDataSource(this, Uri.fromFile(new File("/storage/emulated/0/soundrecorder/My recording #26.wav"))); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mp.prepareAsync(); 
    mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 

J'ai essayé différents fichiers audio avec différents formats mais le résultat est la même erreur. J'ai également essayé de rechercher la réponse sur stackoverflow mais n'ai pas pu résoudre le problème. Pouvez-vous m'aider à ce sujet?

+0

vous sont en cours d'exécution sur l'appareil ou l'émulateur? –

+0

En cours d'exécution sur Motorola Moto G exécutant Nougat 7.1.1 – Ali

+0

un problème que je vois est les espaces dans votre nom de fichier de chanson, essayez de les supprimer. Cela pourrait marcher. –

Répondre

0

Il semble qu'il y ait un problème avec votre fichier. Mettez à jour cela avec:

musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

Et puis procédez comme suit:

1. getLoaderManager().initLoader(0,null,this); 
    2. @Override 
     public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
      switch (id){ 
       case 0 : return new CursorLoader(getApplicationContext(),musicUri,null,null,null,null);   
      return new Loader<>(this); 
     } 

3. @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
     switch (loader.getId()) { 
      case 0 : 
       if(data != null && data.moveToFirst()) { 
        songTitleColumnIndex = data.getColumnIndex(MediaStore.Audio.Media.TITLE); 
        do { 
         songTitle = data.getString(songTitleColumnIndex); 
         songsList.add(songTitle); 
        } while (data.moveToNext()); 
       } 
       break; 

Ainsi, les SongTitles sont mis dans le songList qui est un ArraList de type String.

Espérons que cela aide.

+0

pourquoi mettre des titres de chansons dans une liste de tableau? – Ali

+0

Je ne fais que maintenir un ArrayList de SongTitles, que je montrerais comme la liste des chansons présentes dans mon appareil. –

+0

cela résoudrait-il l'erreur? – Ali

0

Essayez d'utiliser un FileInputStream pour démarrer votre MediaPlayer avec un FileDescriptor à la place:

String yourFilePath = "/wherever/your/file/is.wav"; 

MediaPlayer mPlayer = new MediaPlayer(); 

try{ 
    FileInputStream inputStream = new FileInputStream(yourFilePath); 
    mPlayer.setDataSource(inputStream.getFD()); 
    inputStream.close(); 

    mPlayer.prepare(); 
    mPlayer.start(); 

}catch (IOException e){ 
    Log.e("IOException", e.getMessage()); 
} 
+0

a toujours eu cette erreur http://imgur.com/a/cbwBJ – Ali