как остановить несколько звуков, когда я нажимаю на кнопку запуска снова - PullRequest
0 голосов
/ 16 ноября 2018

В моем приложении я создаю музыкальный фон, который работает при нажатии кнопки запуска и музыка меняет петлю sound1, sound2, sound3.

 public void startNewGame() {//initializing the sounds

   final  MediaPlayer sound1 = MediaPlayer.create(this, R.raw.music1);

   final MediaPlayer sound2 = MediaPlayer.create(this, R.raw.music2);

   final MediaPlayer sound3 = MediaPlayer.create(this, R.raw.music3);

    //generate random number
    Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(3) + 1;

    //picking the right sound to play
    switch (randomInt){
        case 1:
            if ( !sound1.isPlaying())
                sound1.setLooping(true);
              sound1.start();

            break;
        case 2:  if ( !sound2.isPlaying() )

                    sound2.setLooping(true);
                    sound2.start();

            break;
        case 3:  
                if ( !sound3.isPlaying() )
                sound3.setLooping(true);
                sound3.start();

           break;
    }

    mBtnChooseAndStart.setVisibility(View.GONE);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.fl_board_container, 
   GameFragment.newInstance(mBitmapBricks, GOAL_STATUS))
                .commit();
    }

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

 public void restart(View view) {

    if (mFullBitmap == null) {
        // Not started, so cannot restart
        UIUtils.toast(this, getString(R.string.not_started));
        return;
    }

    new AlertDialog.Builder(this)
            .setTitle(getString(R.string.restart))
            .setMessage(getString(R.string.confirm_restart_msg))
            .setPositiveButton(getString(R.string.confirm), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                    startNewGame();
                }
            })
            .setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            })
            .show();
}

, а также как остановить звуки в onBackpressed ().

1 Ответ

0 голосов
/ 20 ноября 2018

наконец я нашел решение и оно работает сначала создайте метод остановки медиаплеера

public void cleanUpMediaPlayer(){
    if(mediaPlayer != null) {
        if(mediaPlayer.isPlaying()) {
            mediaPlayer.stop();
        }
        mediaPlayer.release();
    }
}

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

public void sound1(){
    cleanUpMediaPlayer();
    mediaPlayer = MediaPlayer.create(this, R.raw.music1);
    mediaPlayer.setLooping(true);
    mediaPlayer.start();
}

public void sound2(){
    cleanUpMediaPlayer();
    mediaPlayer = MediaPlayer.create(this, R.raw.music2);
    mediaPlayer.setLooping(true);
    mediaPlayer.start();
}

public void sound3(){
    cleanUpMediaPlayer();
    mediaPlayer = MediaPlayer.create(this, R.raw.music3);
    mediaPlayer.setLooping(true);
    mediaPlayer.start();
}

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

 Random randomGenerator = new Random();
    int randomInt = randomGenerator.nextInt(3) + 1;

    //picking the right sound to play
    switch (randomInt){
        case 1:
           sound1();

            break;
        case 2:
            sound2();

            break;
        case 3:
            sound3();

            break;

    }

то же самое для onBackPressed (), вам просто нужно вызвать метод cleanUpMediaPlayer

public void onBackPressed() {

 cleanUpMediaPlayer();

..... }

хороший день для моего друга mistek:)

...