2017-10-07 29 views
1

我遇到以下問題:Spinner中重疊兩個聲音

我有一個有不同歌曲的微調。在微調器中,用戶可以預覽所選的聲音。我已經開發了那部分。但我的問題是:當我從列表中選擇一首歌曲時,它將播放。然後,當我們從列表中選擇另一首歌曲時,Mediaplayer不會停止並播放上一首歌曲。但我需要的是當用戶選擇另一首歌曲時停止前一首歌曲。

這裏是我的代碼...

//set onClickListner to the onItem SelectedListner 
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      choose_ringtone = (int) id; 
      // Toast.makeText(setAlarm.this,"The selected choice is "+ id,Toast.LENGTH_SHORT).show(); 
      String ringtSound = String.valueOf(parent.getItemAtPosition(position)); 
      //set ringtone options 
      switch (ringtSound) { 
       case "alarm Sound 1": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.wake_up); 
        break; 
       case "alarm Sound 2": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.alarm); 
        break; 
       case "alarm Sound 3": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.wake_up_tone); 
        break; 
       case "alarm Sound 4": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.sweet_alarm); 
        break; 
       case "alarm Sound 5": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.morning_alarm); 
        break; 
       default: 
        break; 

      } 
      if(mp!=null) { 
       mp.start(); 

      } 

回答

0

switch聲明之前,你可以不喜歡

if (mp != null && mp.isPlaying()) { 
    mp.stop(); 
} 

我不知道你的代碼的其餘部分看起來像,但請確保它也遵循提示從Android Developers,具體如下:

此外,還建議一旦MediaPlayer對象不再被使用,立即調用release(),以便可以立即釋放與MediaPlayer對象關聯的內部播放器引擎使用的資源。資源可能包括諸如硬件加速組件之類的單體資源,並且調用失敗可能導致MediaPlayer對象的後續實例回退到軟件實現或完全失敗。一旦MediaPlayer對象處於End狀態,就不能再使用它,並且無法將其恢復到任何其他狀態。

+0

Thanks.Its工作。我也使用isPlaying()來檢查mediaplayer是否正在運行。但我用它後切換case.I認爲,case.Any方式再次感謝您的建議.. – Sampath

+0

很好聽! [接受答案](https://meta.stackexchange.com/questions/14994/do-you-feel-dirty-if-you-nudge-new-users-to-accept-your-answer-when-they-指示)是在這裏說謝謝的好方法。 – Bill

0

試試這個,在start Play之前調用函數。

switch (ringtSound) { 
       case "alarm Sound 1": 
         stopPlaying() 
        mp = MediaPlayer.create(setAlarm.this, R.raw.wake_up); 
        mp.start(); 
        break; 
      } 

調用停止聲音的功能。

private void stopPlaying() { 
       if (mp != null) { 
        mp.stop(); 
        mp.release(); 
        mp = null; 
       } 
       } 
0

嘗試mp.stop();之前啓動任何聲音......