Вопрос по android, click, playback – Нажмите кнопку Android, чтобы воспроизвести музыку, нажмите еще раз, чтобы остановить звук

0

У меня есть кнопка, при нажатии на которую играет музыка, как это сделать, когда я нажимаю второй раз, чтобы остановить музыку?

 Button two = (Button)this.findViewById(R.id.button2);
            final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.two);
            two.setOnClickListener(new OnClickListener(){

                public void onClick(View v) {
                    mp2.start();
                }
            });  

Хорошо, это работает:

Button one = (Button)this.findViewById(R.id.button1);
    final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.n);
    one.setOnClickListener(new OnClickListener(){

        @Override
            public void onClick(View v) {
            if (mp1.isPlaying()) {
                mp2.pause();
                } 
                else {
                mp2.start();
            }
        ;
    }});

Тот, у которого пауза выше, работает, но если я хочу остановить музыку, он не работает. Следующее не работает:

@Override
        public void onClick(View v) {
        if (mp1.isPlaying()) {
            mp2.stop();
            } 
            else {
            mp2.start();
        }
    ;
}});

Я получаю ошибку: начало вызывается в состоянии 0

ошибка (-38, 0)

У вас есть два разных:MediaPlayersmp1 а такжеmp2, Вы проверяетеmp1.isPlaying()и исходя из этого, вы начинаете или останавливаетесьmp2, + Изменитьif (mp1.isPlaying()) { .. } кif (mp2.isPlaying()) { .. } Vikram

Ваш Ответ

8   ответов
1

что я использовал для запуска и остановки музыки, вы должны подготовить MediaPlayer для воспроизведения. Примечание: это запустит музыку с того места, где она остановилась.

Медиаплеер метод prepare ()

Если вы транслируете музыку, вы должны использовать prepareAsync ()

musicButton = (Button) findViewById(R.id.btn_dj_player);
    musicButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mp.isPlaying()) {//check if a song is already playing
                mp.stop();
                try {
                    mp.prepare();//get the mediaplayer reeady for playback
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }else {
                mp.start();
            }
        }   
    });
1
if(mp2.isPlaying()) {
   mp2.pause();
} else {
   mp2.start();
}
работает только для паузы, но не для остановки звука Dmitry
2

чтобы увидеть, запущено ли оно (и установить логическое значение в false), и если это так, остановить музыку, если не запустить ее (и установить логическое значение в true). Что-то вроде:

public void onClick(View v) 
{
    if(musicPlaying == false)
    {
        mp2.start();
        musicPlaying = true;
    }
    else
    {
        mp2.stop();
        musicPlaying = false;
    }
}
3

В соответствии сhttp://developer.android.com/reference/android/media/MediaPlayer.htmlЯ полагаю, вы могли бы сделать что-то вроде этого:

 Button two = (Button)this.findViewById(R.id.button2);
            final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.two);
            two.setOnClickListener(new OnClickListener(){

                public void onClick(View v) {

                    // If the music is playing
                    if(mp2.isPlaying() == true)
                        // Pause the music player
                        mp2.pause();
                    // If it's not playing
                    else
                        // Resume the music player
                        mp2.start();
                }
            });

Вы можете написать просто

 if(mp2.isPlaying())

вместо

 if(mp2.isPlaying() == true)

Это'Просто ради понимания того, что происходит.

0

я перенес звук в начало (seekTo (0)), затем приостановил звук. Если звук уже приостановлен, вызывается только seekTo (0).

 public void onClick(View v) {
       if(mp.isPlaying()){
          mp.seekTo(0);
          mp.pause();
        }
        else{
            mp.seekTo(0);
        }
    }    ;
0

Добавьте глобальную переменную boolean flag = false;

if(flag==false)
    {
        mp=MediaPlayer.create(this, R.raw.abc);
        mp.start();
        playbutton.setText("Pause");
        flag=true;
    }
    else if(mp.isPlaying()&&flag==true)
    {
        mp.pause();
        playbutton.setText("Play");
        flag=false;
    }

Этот код будет работать, если вы хотите использовать ту же кнопку, что и PLAY / PAUSE в вашем приложении. Надеюсь это поможет. Добавьте этот код в функцию кнопки onClick (), которую вы используете для воспроизведения или паузы.

0

Я объявил логическую переменную:

boolean isButtonClicked = false;

Затем я настроил if else в методе так:

initPlaySound()
{
    if(isButtonClicked)
    {
       player.start();
    } else{
       player.stop();
}

Наконец, я настроил onClick кнопки в методе:

button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            isButtonClicked = !isButtonClicked;
            initPlaySound();
        }
    });

По сути, когда кнопка нажимается впервые, логическое значение устанавливается в противоположность ее ' текущее состояние (от ложного до истинного) и код внутри if выполняется. После повторного нажатия кнопки логическое значение снова устанавливается на противоположное (от true до false), и звук прекращается.

0

seekTo() функционировать?

Что-то вроде:

if (mp.isPlaying()) {
            mp.stop();
            mp.prepareAsync();
            mp.seekTo(0);
        } else {
            mp.start();
        }
    }

Я просто догадываюсь здесь, но, возможно, стоит разобраться. :-)

Похожие вопросы