Я думаю, что вы ищете для управления Audio Focus . Здесь обсуждается, как реализовать изменения, когда другое приложение / ваше приложение получает контроль над аудио-фокусом, то есть настройки усиления (приглушение громкости).
mAudioManager = (AudioManager) Context.getSystemService(Context.AUDIO_SERVICE);
mPlaybackAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
mFocusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setAudioAttributes(mPlaybackAttributes)
.setAcceptsDelayedFocusGain(true)
.setOnAudioFocusChangeListener(mMyFocusListener, mMyHandler)
.build();
mMediaPlayer = new MediaPlayer();
final Object mFocusLock = new Object();
boolean mPlaybackDelayed = false;
boolean mPlaybackNowAuthorized = false;
// ...
int res = mAudioManager.requestAudioFocus(mFocusRequest);
synchronized(mFocusLock) {
if (res == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
mPlaybackNowAuthorized = false;
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mPlaybackNowAuthorized = true;
playbackNow();
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
mPlaybackDelayed = true;
mPlaybackNowAuthorized = false;
}
}
// ...
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (mPlaybackDelayed || mResumeOnFocusGain) {
synchronized(mFocusLock) {
mPlaybackDelayed = false;
mResumeOnFocusGain = false;
}
playbackNow();
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
synchronized(mFocusLock) {
mResumeOnFocusGain = false;
mPlaybackDelayed = false;
}
pausePlayback();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
synchronized(mFocusLock) {
mResumeOnFocusGain = true;
mPlaybackDelayed = false;
}
pausePlayback();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// ... pausing or ducking depends on your app
break;
}
}
}
Однако, пожалуйста, обратите внимание, как указано в документации :
Постоянная потеря фокуса
Если потеря фокуса звука является постоянной
(AUDIOFOCUS_LOSS), другое приложение воспроизводит звук. Ваше приложение должно остановиться
воспроизведение немедленно, так как оно никогда не получит AUDIOFOCUS_GAIN
Перезвоните. Чтобы возобновить воспроизведение, пользователь должен предпринять явное действие,
например, нажав кнопку управления воспроизведением транспорта в интерфейсе уведомлений или приложения.
Предполагается, что получена постоянная потеря фокуса звука, однако я вижу некоторые обходные пути, например опрос фокуса звука, но, вероятно, лучше этого не делать. Как сказано, они прямо заявили, что:
пользователь должен предпринять явное действие