RockBearLTD
@RockBearLTD
Ленивый недопрограммист.

Остановка MediaPlayer при полноэкранной рекламе?

На первой активности загружается полноэкранное объявление (AdMob)
Есть вторая активность. Сама игра. В ней начинает играть музыка, как только активность запускается. Музыка воспроизводится с помощью MedaiPlayer, также я ставлю музыку на паузу при сворачивании приложения и выключаю ее при закрытии активности.
Затем в Intent'е после startActivity() показываю полноэкранное объявление. При его закрытии музыка накладывается сама на себя два раза. Причем один поток потом просто умолкает через 4-7 секунд. Когда в игре в следующий раз показывается полноэкранка (не при старте активности) - музыка ставится на паузу, при закрытии объявления продолжает играть.

1 Activity
Intent intent = new Intent(this, Game.class);
 startActivity(intent);
if (interstitial.isLoaded()) interstitial.show();


2 Activity
MediaPlayer mp;
int music;

//в onCreate
music = R.raw.m1;
playMusic();

//далее после onCreate
 void playMusic(){
        new Thread(){
            public void run(){
                MediaPlayer.create(Game.this, music);
                mp.start();

                mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener(){
                    public void onCompletion(MediaPlayer arg0){
                        arg0.start();
                    }
                });
            }
        }.start();
    }

 @Override
    public void onPause() {
        Game.super.onPause();
        if (mp != null) mp.pause();
    }

    @Override
    public void onResume() {
        Game.super.onResume();
        playMusic();
    }


Вопрос: в чем причина повторного наложения музыки при открытии активности и полноэкранного объявления? Ведь при дальнейшем показе все в порядке. И в чем причина последующего самостоятельного отключения одного потока?
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
orcDamnar
@orcDamnar
Java, C/C++, Android SDK
ну судя по всему вы вызываете playMusic в onCreate и в onResume, соответственно, создается два объекта Thread и внутри для каждого объекта создается свой плеер. Вот и играют они у вас все вместе. а останавливаете вы только тот, на который ссылается последний созданный.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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