Android 在旋转器中重叠两个声音
我遇到以下问题: 我有一个旋转器,里面有不同的歌曲。在微调器中,用户可以预览选定的声音。我已经开发了那个部分。但我的问题是:当我从列表中选择一首歌曲时,它将播放。然后,当我们从列表中选择另一首歌曲时,Mediaplayer不会停止播放前一首歌曲。但我需要的是在用户选择另一首歌曲时停止上一首歌曲 这是我的密码Android 在旋转器中重叠两个声音,android,Android,我遇到以下问题: 我有一个旋转器,里面有不同的歌曲。在微调器中,用户可以预览选定的声音。我已经开发了那个部分。但我的问题是:当我从列表中选择一首歌曲时,它将播放。然后,当我们从列表中选择另一首歌曲时,Mediaplayer不会停止播放前一首歌曲。但我需要的是在用户选择另一首歌曲时停止上一首歌曲 这是我的密码 //set onClickListner to the onItem SelectedListner spinner.setOnItemSelectedListener(new Ad
//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();
}
//将onClickListner设置为onItem SelectedListner
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
选择铃声=(int)id;
//Toast.makeText(setAlarm.this,“所选选项为”+id,Toast.LENGTH_SHORT).show();
String ringtSound=String.valueOf(parent.getItemAtPosition(position));
//设置铃声选项
开关(铃声){
“报警声1”案例:
mp=MediaPlayer.create(setAlarm.this,R.raw.wake_);
打破
“报警声2”案例:
mp=MediaPlayer.create(setAlarm.this,R.raw.alarm);
打破
“警报声3”案例:
mp=MediaPlayer.create(setAlarm.this,R.raw.wake\u-up\u-tone);
打破
“警报声4”案例:
mp=MediaPlayer.create(setAlarm.this,R.raw.sweet\u alarm);
打破
“警报声5”案例:
mp=MediaPlayer.create(setAlarm.this,R.raw.morning\u alarm);
打破
违约:
打破
}
如果(mp!=null){
mp.start();
}
在开关
语句之前,您可以执行以下操作
if (mp != null && mp.isPlaying()) {
mp.stop();
}
我不确定代码的其余部分是什么样子的,但请确保它也遵循以下提示,特别是:
还建议在不再使用MediaPlayer对象后,调用release()
立即释放,以便与MediaPlayer对象关联的内部播放器引擎使用的资源可以立即释放。资源可能包括单例资源,如硬件加速组件和调用释放()失败
可能会导致MediaPlayer对象的后续实例退回到软件实现或完全失败。一旦MediaPlayer对象处于结束状态,就无法再使用,也无法将其恢复到任何其他状态
在
switch
语句之前,您可以执行以下操作
if (mp != null && mp.isPlaying()) {
mp.stop();
}
我不确定代码的其余部分是什么样子的,但请确保它也遵循以下提示,特别是:
还建议在不再使用MediaPlayer对象后,调用release()
立即释放,以便与MediaPlayer对象关联的内部播放器引擎使用的资源可以立即释放。资源可能包括单例资源,如硬件加速组件和调用释放()失败
可能会导致MediaPlayer对象的后续实例退回到软件实现或完全失败。一旦MediaPlayer对象处于结束状态,就无法再使用,也无法将其恢复到任何其他状态
在调用下面的函数之前,请尝试此操作
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;
}
}
在调用下面的函数之前,请尝试此操作
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;
}
}
尝试
mp.stop();
在开始任何声音之前…尝试mp.stop();
在开始任何声音之前…谢谢。它的工作。我也使用isplay()检查mediaplayer是否正在运行。但我在交换机机箱后使用了它。我认为是这样的机箱。再次感谢您的建议。很高兴听到!这是表达感谢的好方法。谢谢。它的工作。我还使用iPlay()检查mediaplayer是否正在运行。但我在开关盒后使用了它。我认为是这样。再次感谢您的建议。很高兴听到!这是表达感谢的好方法。