Откажитесь от Audio Focus и продолжайте предыдущую музыкальную / видео трансляцию - PullRequest
0 голосов
/ 09 октября 2018

Я реализовал функцию TTS (Текст в речь) в своем приложении.Все работает отлично, и теперь я столкнулся с проблемой, в которой я не могу найти решение.

По сути, я получаю Аудио Фокус перед активацией моей функции TTS.В реальном приложении музыка останавливается, когда я это делаю (именно так я и хочу, чтобы она себя вела).Однако, как только функция TTS завершена, я прекращаю фокусировку звука, и музыка / видео не продолжаются.Я не знаю, как продолжить предыдущий музыкальный / видео поток, который воспроизводился до моего TTS.

Вот код, который я реализовал:

Код для отказа от аудио-фокуса после завершения моего TTS:

@Override
public void onUtteranceCompleted(String s) {
    Log.v(TAG, s);
    if(!getUserPreference().getTest()){
        //setDefaultVolume();
        audioManager.abandonAudioFocus(this);
    }
}

Код для получения аудио-фокуса перед моим TTSначинается:

audioManager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);

int requestAudioFocusResult = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
if(requestAudioFocusResult == AudioManager.AUDIOFOCUS_REQUEST_GRANTED){...

Я приветствую любые дополнительные вопросы, касающиеся моего вопроса.Ждем ответов / предложений.

Изменено в соответствии с ответом:

int requestAudioFocusResult = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);

Я реализовал, как сказал ответ, но значение requestAudioFocusResult возвращается как 1, когда должно быть 3. Любая идея?

1 Ответ

0 голосов
/ 09 октября 2018

после завершения функции TTS я прекращаю фокусировку звука, а музыка / видео не продолжаются.

Поскольку вы запрашиваете фокусировку звука бесконечно (AUDIOFOCUS_GAIN)поведение, которое вы описываете, звучит как ожидаемое поведение :

[Я] предположил, что другое приложение теперь используется для прослушивания звука, и ваше приложение должно покончить с собой.С практической точки зрения это означает остановку воспроизведения, удаление слушателей мультимедийных кнопок, что позволяет новому аудиоплееру обрабатывать только эти события, и отказ от фокусировки звука.В этот момент, вы ожидаете, что пользовательское действие (нажатие кнопки воспроизведения в вашем приложении) потребуется, прежде чем вы возобновите воспроизведение звука .


Мне кажется, что выследует запросить временную фокусировку звука, например AudioManager.AUDIOFOCUS_GAIN_TRANSIENT (или AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_CAN_DUCK в зависимости от того, считаете ли вы, что для другого звука нормально продолжать воспроизведение в фоновом режиме при более низкой громкости).

...