2017-10-07 31 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();之前启动任何声音......