在微调器

时间:2017-10-07 10:42:31

标签: android

我遇到以下问题:

我有一个带有不同歌曲的微调器。在微调器中,用户可以预览所选声音。我已经开发了那个部分。但我的问题是:当我从列表中选择一首歌时,它会播放。然后当我们从列表中选择另一首歌时,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();

            }

3 个答案:

答案 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 ...