@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (mPlayOnAudioFocus && !isPlaying()) {
play();
} else if (isPlaying()) {
setVolume(MEDIA_VOLUME_DEFAULT);
}
mPlayOnAudioFocus = false;
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
setVolume(MEDIA_VOLUME_DUCK);
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (isPlaying()) {
mPlayOnAudioFocus = true;
pause();
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
mAudioManager.abandonAudioFocus(this);
mPlayOnAudioFocus = false;
stop();
break;
}
}
}
Следующий фрагмент кода содержит реализацию этого интерфейса для приложения, воспроизводящего аудио.И он справляется с дакингом для временной потери фокуса звука.Он также обрабатывает изменение фокуса аудио из-за того, что пользователь приостанавливает воспроизведение, по сравнению с другим приложением (например, Google Assistant), вызывающим кратковременную потерю фокуса аудио
делает ли ваше приложение временно нужным аудио фокус (с опцией «уклоняться»), так как оноНужно воспроизвести звуковое уведомление или устное направление разговора, или необходимо записать аудио от пользователя в течение короткого периода времени?Это
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK.
Уклонение от паузы при временной потере фокуса звука Вы можете приостановить воспроизведение или временно уменьшить громкость звука.воспроизведение в OnAudioFocusChangeListener, в зависимости от того, какой UX должен предоставить ваше приложение.Android O поддерживает автоматическую настройку, при которой система автоматически уменьшает громкость вашего приложения, без необходимости писать дополнительный код.В вашем OnAudioFocusChangeListener просто проигнорируйте событие AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK.
В Android N и более ранних версиях вы должны реализовать себя как приглушенный (как показано в фрагменте кода выше).
для подробного посещения: https://medium.com/androiddevelopers/audio-focus-3-cdc09da9c122
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK добавлено на уровне API 8 public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK Используется для указания временного запроса аудио-фокуса, ожидаемого на короткий промежуток времени, и в тех случаях, когда он приемлем для другихзвуковые приложения, чтобы продолжить воспроизведение после понижения их уровня выходного сигнала (также называемый «приглушением»).Примерами временных изменений являются воспроизведение направлений движения, где допустимо воспроизведение музыки в фоновом режиме.