我遇到以下问题:
我有一个带有不同歌曲的微调器。在微调器中,用户可以预览所选声音。我已经开发了那个部分。但我的问题是:当我从列表中选择一首歌时,它会播放。然后当我们从列表中选择另一首歌时,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 :(得分:0)
在switch
语句之前,您可以执行类似
if (mp != null && mp.isPlaying()) {
mp.stop();
}
我不确定代码的其余部分是什么样的,但请确保它也遵循Android Developers的提示,特别是:
还建议一旦不再使用MediaPlayer对象,立即调用
release()
,以便可以立即释放与MediaPlayer对象关联的内部播放器引擎使用的资源。资源可能包括单一资源,例如硬件加速组件,调用失败release()
可能导致MediaPlayer对象的后续实例回退到软件实现或完全失败。一旦MediaPlayer对象处于End状态,就无法再使用它,也无法将其恢复到任何其他状态。
答案 1 :(得分: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;
}
}
答案 2 :(得分:0)
在开始任何声音之前尝试disabled
...