0

ボタンを押すまでbeebサウンドを連続して実行しようとしています。私はraw folderにalarm.mp3ファイルを追加しました。しかし、このメディアファイルは実行されません。私はIllegalStateExceptionを得ています。Android MediaPlayerの実行時にIllegalStateExceptionが発生する

これは私のコードです:

MediaPlayer mp = new MediaPlayer(); 
try{ 
      mp.release(); 
      mp = MediaPlayer.create(this,R.raw.alarm); 

      mp.prepare(); 
      mp.setVolume(1f, 1f); 
      mp.setLooping(true); 
      mp.start(); 

     }catch(IllegalStateException e){ 
      System.out.println("Test Exception "+e); 

     }catch (IOException e) { 
      // TODO: handle exception 
      System.out.println("Test Exception "+e); 
     } 

私はmp3がasset folderにファイルとそれを再生しようと付け加えたが、それでも私は、同じ例外を取得しています。

これは私が使用するコードです:

MediaPlayer mp = new MediaPlayer(); 
try{ 
       mp.release(); 
       AssetFileDescriptor afd=context.getAssets().openFd("alarm.mp3s"); 
       mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength()); 
       mp.prepare(); 
       mp.setVolume(1f, 1f); 
       mp.setLooping(true); 
       mp.start(); 

      }catch(IllegalStateException e){ 
       System.out.println("Test Exception "+e); 

      }catch (IOException e) { 
       // TODO: handle exception 
       System.out.println("Test Exception "+e); 
      } 

任意の助けがにappriciatedされるだろう。より多くの情報が必要な場合は、私に知らせてください。

UPDATE:

try{ 
       mp = MediaPlayer.create(context,R.raw.alarm); 
       mp.setVolume(1f, 1f); 
       mp.setLooping(true); 
       mp.start(); 

      }catch(IllegalStateException e){ 
       System.out.println("Test Exception "+e); 

      } 

ユーザーがボタンをクリックすると:

mp.stop(); 
     if(!mp.isPlaying()){ 
       mp.release(); 
     } 

これは例外である:

10-04 12:50:06.105: I/System.out(14074): Test Exception java.lang.IllegalStateException 
+0

'release()'が呼ばれた後、 'MediaPlayer'は使用できません。 'MediaPlayer'で完全に終了し、そのリソースが不要になったら、メソッドを呼び出します。 – Onik

+0

ログを記録し、その短い行だけでなく、_full_ stacktraceを送信します。 – njzk2

答えて

1

スタックトレースを見ることなく、単に仮定をit's 。しかし、あなたが直接電話しているのは

mp.release(); 

あなたが作成した直後です。もう1つはnew MediaPlayer()create()mediaPlayerを作成することです。 とmp.create()メソッドを使用する場合、new MediaPlayer()は必要ありません。prepare()に電話する必要はありません。私は次のように試してみます:

mp = MediaPlayer.create(this,R.raw.alarm);    
    mp.setVolume(1f, 1f); 
    mp.setLooping(true); 
    mp.start(); 

mediaPlayerが終了した場合は、releaseと呼んでください。 release()後、APIで説明したように、MediaPlayerは終了状態である:

MediaPlayerのオブジェクトが終了状態になると、それはもはや は使用されませんし、それを取り戻す方法はありませんすることができます他の州。

あなたはAPIに従うべきです、私はそれが多くを読むことを知っていますが、MediaPlayerに関するすべてのものを知ることは非常に重要です。

+0

ご協力いただきありがとうございます。私はあなたが提案した変更を行いましたが、私は同じExceptionを得ています。 –

+0

投稿したコードを編集して、スタックトレースを掲示し、エラーが発生した行を指摘してください。 – Opiatefuchs

+0

私は質問を更新しました。私は大きなプロジェクトに取り組んでおり、関連する部分を見つけることができなかった全体のスタックトレースを取得するのは難しいです。 –

関連する問題