Exoplayer — воспроизводит один и тот же звук снова и снова при повторном открытии активности.

Я создаю экземпляр exoplayer и добавляю URL-адрес потока в качестве источника прогрессивного мультимедиа, подготавливаю проигрыватель и проигрываю звук. Когда я возвращаюсь к предыдущему действию и снова открываю действие проигрывателя, другой экземпляр проигрывателя запускает тот же звук (два экземпляра одновременно воспроизводят один и тот же звук). Также у меня есть кнопка отключения звука. Он работает, как и ожидалось, когда я открываю активность в первый раз. При повторном открытии действия кнопка отключения звука отключает звук только экземпляра ExoPlayer текущего действия.

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

val dataSourceFactory = DefaultDataSourceFactory(this, Util.getUserAgent(this, packageName))
val newMediaSource = ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse("STREAM URL"));
val exoPlayer = ExoPlayerFactory.newSimpleInstance(this);
exoPlayer.prepare((newMediaSource));
exoPlayer.playWhenReady = true;

muteButton.setOnClickListener {
    if(muteButton.tag == "muted")
    {
        exoPlayer.volume = 1f;
        muteButton.tag = "unmuted";
    }
    else
    {
        exoPlayer.volume = 0f;
        muteButton.tag = "muted";
    }
}

Я хочу, чтобы тот же ExoPlayer запускался при повторном открытии активности, а также отключал звук этого конкретного экземпляра.


person Prasanna Kumar    schedule 02.07.2019    source источник
comment
Переопределите onBackPressed() и вызовите finish() внутри него. Даже не думайте, что вам нужно звонить finish().   -  person HB.    schedule 02.07.2019
comment
Пытался. Не работает. Тем не менее звук воспроизводится. Также забыл упомянуть, что мне нужно, чтобы звук играл в фоновом режиме. Поэтому я не могу остановить плеер onBackPressed()   -  person Prasanna Kumar    schedule 02.07.2019
comment
Если вы закончите действие, не должно быть ссылки на экзоплеер, если только вы не храните экзоплеер в памяти. Вы пробовали запускать exoplayer?   -  person HB.    schedule 02.07.2019
comment
Да. Но отключение плеера мне не помогает, потому что я хочу, чтобы звук также воспроизводился в фоновом режиме.   -  person Prasanna Kumar    schedule 03.07.2019
comment
Так вы запускаете exoplayer в сервисе? Вы не упомянули об этом в вопросе. Вы должны проверить свою активность onCreate, если служба запущена, если это так, вы должны сначала остановить ее, а затем снова запустить, передав новый файл.   -  person HB.    schedule 03.07.2019
comment
Я не запускаю exoplayer в сервисе. Запуск его как службы поможет мне решить проблему, я думаю.   -  person Prasanna Kumar    schedule 03.07.2019
comment
Давайте продолжим это обсуждение в чате.   -  person Prasanna Kumar    schedule 03.07.2019


Ответы (1)


В итоге я использовал общие настройки для сохранения состояния службы. Таким образом, всякий раз, когда служба запускается, логическое значение в общих предпочтениях устанавливается равным true. Поэтому я могу запустить службу только тогда, когда логическое значение равно false. Также я использую широковещательный приемник как в деятельности, так и в службе для обмена сообщениями.

person Prasanna Kumar    schedule 11.07.2019