Как остановить звук моего MediaPlayer, когда приложение закрывается?

У меня три вопроса.

  1. Как я могу сделать так, чтобы звук моего MediaPlayer останавливался, когда я переключал / закрывал приложение / активность?

  2. Как я могу сделать так, чтобы sound1 останавливался при нажатии на sound2?

  3. Как мне остановить и воспроизвести звук на одной кнопке? Я имею в виду, что когда я нажимаю кнопку 1 один раз, тогда начинается звук, а когда я нажимаю его снова, звук останавливается и так далее.

Я уже попробовал, но это не сработало.

Вот мой MainActivity:

import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {


        Button button1;
        Button button2;
        boolean w;
        boolean b;

        private MediaPlayer mp;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button1 = (Button) findViewById(R.id.button1);
            button2= (Button) findViewById(R.id.button2);
            w = true;
            b = true;
    //Button1
            button1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(b == true){
                    mp= MediaPlayer.create(MainActivity.this, R.raw.song1);
                    mp.start();
                        b = false;
                }else{
                        mp.stop();
                        b = true;
                    }

                }
            });
    //Button 2
            button2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(w == true){

                        mp= MediaPlayer.create(MainActivity.this, R.raw.sound2);
                        mp.start();
                        w = false;
                    }else{
                        mp.stop();
                        w = true;

                }}
            });
        }
    //Stopping the sound when switching or closing the App
        @Override
        public void onPause() {
            mp.stop();
            super.onPause();
        }



}

Можете ли вы сказать мне, как решить мои проблемы?

Я новичок в Android Studio и прошу прощения за мой плохой английский:)

2 ответа

Сначала обратитесь к этой статье https://developer.android.com/guide/topics/media/mediaplayer.html

1.

public void onDestroy() {
     if (mp!=null) {
          mp.stop();
          mp.release();
     }
}

2.

//Stop media player
mp.stop();
// Set data source of sound 2
mp.setDataSource(url2);
mp.prepare(); 
mp.start();

3.

//Pause the sound
mp.pause();
//Resume the sound
mp.start();

Ответ кажется довольно простым: сохраните ссылку на свой медиаплеер. В настоящее время вы создаете новый MediaPlayer каждый раз. Но вы также должны быть осторожны с состоянием MediaPlayer, оно довольно придирчиво.

Возьмите этот пример потока:

  • Запустить приложение > [mp = null, b = false, w = false]
  • Нажмите кнопку 1 > [mp = instance1, b = true, w = false]> [instance1 играет]
  • Нажмите кнопку 2 > [mp = instance2, b = true, w = true]> [instance1 воспроизводится, instance2 воспроизводится]
  • Нажмите кнопку 1 > [mp = instance2, b = false, w = true]> [instance1 воспроизводится, instance2 остановлен]
  • Приостановить работу приложения > [mp = instance2, b = false, w = true]> [instance1 воспроизводится, instance2 остановлен]

Также важно освободить () ваш медиаплеер, когда вы делаете паузу

Другие вопросы по тегам