2017-05-31 4 views
-2

c'est le code où après avoir joué une chanson, il devrait changer haut suivant BT l'application se ferme.Voici le conpletion je veux changer la chanson bt il s'arrêteMon application s'arrête malheureusement lorsque le joueur joue une chanson et après l'achèvement de la chanson je veux changer l'application se bloque

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
           @Override 
           public void onCompletion(MediaPlayer mpp) { 
            mp.stop(); 
            mp.reset(); 
            mp.release(); 


            pos =(pos+1)% mysongs.size(); 
            String mediaPath =file.getAbsolutePath()+ "/" + mysongs.get(pos)+".wav"; 
            Log.d("pathh1", mediaPath); 
            u = Uri.parse(mediaPath); 
            mp = MediaPlayer.create(getApplicationContext(),u); 
            // mp = MediaPlayer.create(getApplicationContext(),u); 
            try { 
             mp.setDataSource(getApplicationContext(),u); 
             mp.prepare(); 
             mp.start(); 
             th.start(); 
            } catch (IOException e) { 
             e.printStackTrace(); 
            } 

           } 
          }); 

eRREUR:


05-31 17:24:52.908 9460-9460/php.example.abs.voicerecorder E/MediaPlayer: Should have subtitle controller already set 
05-31 17:25:02.798 9460-9460/php.example.abs.voicerecorder D/pathh1: /storage/sdcard/MediaRecorderSample/Recordingg4.wav 
05-31 17:25:02.798 9460-9460/php.example.abs.voicerecorder D/MediaPlayer: Couldn't open file on client side, trying server side 
05-31 17:25:02.800 9460-9460/php.example.abs.voicerecorder D/AndroidRuntime: Shutting down VM                   --------- beginning of crash 
05-31 17:25:02.801 9460-9460/php.example.abs.voicerecorder E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: php.example.abs.voicerecorder, PID: 9460 
                      java.lang.IllegalStateException 
                       at android.media.MediaPlayer._setDataSource(Native Method) 
                       at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1119) 
                       at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1104) 
                       at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1083) 
                       at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1060) 
                       at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1014) 
                       at android.media.MediaPlayer.setDataSource(MediaPlayer.java:957) 
                       at php.example.abs.voicerecorder.Player$2.onCompletion(Player.java:137) 
                       at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2538) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:135) 
                       at android.app.ActivityThread.main(ActivityThread.java:5254) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:372) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

sans voir le journal des erreurs, tout est juste une supposition, donc s'il vous plaît poster ici .. ce – Opiatefuchs

+0

et ce qui est 'th.start(); un autre objet mediaplayer .... – Opiatefuchs

+0

pas ce qui est un fil de recherche ..... je poste le journal des erreurs – siddhanta

Répondre

1

l'une des choses qui vont mal dans votre code est que vous définissez la source de données après avoir créé le joueur avec le dat une source. Thats dans le mauvais sens:

mp = MediaPlayer.create(getApplicationContext(),u); 
            // mp = MediaPlayer.create(getApplicationContext(),u); 
            try { 
             mp.setDataSource(getApplicationContext(),u); 
             mp.prepare(); 

Comme indiqué dans l'API:

Appel setDataSource .... transfère un objet MediaPlayer dans l'état de repos à l'état initialisés. Une exception IllegalStateException est levée si setDataSource() est appelée dans un autre état.

Vous avez déjà initialisé votre objet MediaPlayer après avoir relâché par:

mp = MediaPlayer.create(getApplicationContext(),u); 

et juste après que vous définissez la source de données dans le bloc try/catch:

mp.setDataSource(getApplicationContext(),u); 

Ce ne fonctionne pas car, à ce stade, le MediaPlayer n'est plus à l'état inactif. Le try/catch n'attrape pas l'erreur car il lance un IllegalStateException et vous venez d'attraper le IOException.

La seule chose que vous devez faire est de supprimer

mp.setDataSource(getApplicationContext(),u);

+0

oui merci ... mais je l'ai eu raison – siddhanta

+0

qu'est-ce que cela signifie "mais je l'ai eu raison"? Vous codez ci-dessus montre définitivement que vous appelez 'mp.setDataSource (getApplicationContext(), u);' dans le bloc try/catch et 'mp = MediaPlayer.create (getApplicationContext(), u);' avant ... – Opiatefuchs

+0

ya thats Je dis que j'ai eu mon erreur – siddhanta