0

soundPoolの後でクリーンアップするにはどうすればよいですか?アプリが強制終了された後もループ音が鳴ります

//私のonStop()onPause()は同じですが、サウンドは再起動するまで続きます。

public void onStop(){
    soundPool.stop(curs);   
    }

  public int playSound(int sound, int loop) {
   if (curs != sound)
   {

       curs = sound;   
       AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
       float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
       float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
       float volume = streamVolumeCurrent / streamVolumeMax;  
       return soundPool.play(soundsMap.get(sound), volume, volume, 1, loop, 1);

       }
       return curs;
 }     
 // is how I call it in a runnable class

   curs=playSound(cur,-1);
4

1 に答える 1

0

を呼び出すときに、古いサウンドを停止することはありませんplaySoundplaySoundが複数回呼び出された場合、2つのサウンドが再生され、終了すると、そのうちの1つだけがキャンセルされます。1つの解決策は、開始するすべてのサウンドIDを保持することです。または、一度に1つのサウンドのみが必要な場合は、コードを変更して、次のサウンドを開始する前に現在のサウンドをキャンセルします。

if (curs != sound)
{
  soundPool.stop(curs); 
  curs = sound;   
  // ... 
}
于 2013-01-30T02:35:25.150 に答える