2017-05-31 9 views
-2

これは1曲を再生した後に次の曲を再生するコードです。それが停止しますBT conpletion私は曲を変更したい私のアプリは残念なことにプレイヤーが曲を演奏し、曲の完成後に私はbtを変更したい場合は停止します。

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

           } 
          }); 

ERROR:あなたのコードで間違って物事の


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

を削除することで、すべてがちょうど推測ですので...ここ – Opiatefuchs

+0

これを投稿して 'th.startは何ですか下さい(); '?他のmediaplayerオブジェクト.... – Opiatefuchs

+0

いいえ、それはシークのためのスレッドです。私はエラーログ – siddhanta

答えて

1

一つは、あなたが作成した後は、データソースを設定することであり、そのdatを持つプレーヤーソース。間違っその調子だ:

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

APIで述べたように:

setDataSourceを呼び出す

....初期状態にアイドル状態にMediaPlayerのオブジェクトを転送します。他の状態でsetDataSource()が呼び出された場合、IllegalStateExceptionがスローされます。

だから、あなたはすでにによってそれを解放した後、あなたのMediaPlayerのオブジェクトを初期化しています:その後

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

と権利をあなたがtry/catchブロック内のデータソースを設定します。

mp.setDataSource(getApplicationContext(),u); 

ことこの時点でMediaPlayerがアイドル状態になっていないため動作しません。試してみてください/ catchはIllegalStateExceptionをスローし、ちょうどIOExceptionをキャッチするので、エラーをキャッチしません。

だから、あなたがしなければならない唯一のことは、エラーログを見ることなく

mp.setDataSource(getApplicationContext(),u);

+0

はい、ありがとう...しかし、私はそれを正しく得ました – siddhanta

+0

"それはどういう意味ですか?"上記のコードでは、try/catchブロックで 'mp.setDataSource(getApplicationContext()、u);'を呼び出す前に 'mp = MediaPlayer.create(getApplicationContext()、u);'の前に... – Opiatefuchs

+0

ya thats私は私のエラーがあると言っている – siddhanta

関連する問題