2016-11-01 4 views
0

こんにちは私はブール値が真であればサウンドを再生し、ブール値が偽であれば2番目のサウンドを再生するだけの完全なサウンドを再生しますAVDのが、デバイス上で実行すると、これはのonCreateエミュレータとは異なるデバイスで動作するアンドロイドコード

setContentView(screen);//pl 
if(msg==true) {//boolean set from other activity 
    playInfo(); 
}else if(msg==false){ 
    playSound(); 
    } 
} 

でこれの再生を開始するが、第2の後にプレイインフォ方式である第二

にジャンプする前に、最初の音が完了してみましょうdoesintそれは電話でplaysoundメソッドにジャンプしますが、avdで完全に動作します

private void playInfo(){ 
    mp = MediaPlayer.create(this, R.raw.msg); 
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mp.start(); 
    mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) { 
      msg = false; 
      playSound(); 
     } 
    }); 
} 

これは、これは、デバイスなぜ彼らは異なる動作をし、それが解決されるだろうか上の任意のアイデアでしょう上のエミュレータ上で完璧に動作しなく再びplaysound方法

private void playSound() { 
     mp = MediaPlayer.create(this, song); 
     mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mp.start(); 
     mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       playSound();//loop the sound 
      } 
     }); 
    } 

のですか?

+0

デバイスとエミュレータとの違いは何ですか? –

+0

mp.stop()を追加します。両方のAPIのonCompletion内でmp.release()を呼び出します。 – thepace

答えて

0

アクティビティがデバイス上でランドスケープモードに設定されていたため、起動後にアクティビティが非常に素早く再描画されたため、起動してからブール値をfalseに設定して再起動しましたが、一度ランドスケープモードで動作させると、2つの異なるメディアプレーヤーを使用して問題を解決し、コードを再加工するのではなく、最初の短いサウンドを再生します。

関連する問題