Не использует ли уведомление в Android аудиофокус для воспроизведения звука уведомления?

#android #android-notifications #android-mediaplayer #android-audiomanager

Вопрос:

Я использую аудиофокус в своем приложении для воспроизведения аудиофайла, но, поскольку я тестирую приложение на соответствие уведомлениям, оказывается, что аудиофокус приложения не теряется всякий раз, когда появляется новое сообщение или уведомление о низком заряде батареи, и звук по-прежнему воспроизводится с уменьшенной громкостью вместе со звуком уведомления, хотя я не закодировал это поведение в прослушивателе изменения фокуса звука, скорее я хочу, чтобы громкость была уменьшена до 0 для изменения фокуса Transient_May_Duck, которое, я думаю, должно использоваться звуками уведомлений, но оказывается, что это не так для звуков уведомлений. Таким образом, система сама уменьшает громкость при запуске звука уведомления (без запроса фокусировки звука), даже если это не то, что разработчик запрограммировал для такого изменения фокусировки звука.

Я тестирую приложение на виртуальном устройстве под управлением Android Oreo.

Это код, который я написал для изменения фокуса звука,

 AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
        @Override
        public void onAudioFocusChange(int i) {
            switch (i) {
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    song.setVolume(0.0f, 0.0f);
                    Toast.makeText(MainActivity.this, "Can_Duck, reducing Vol to 0.0", Toast.LENGTH_SHORT).show();
                    break;

                case AudioManager.AUDIOFOCUS_GAIN:
                    song.setVolume(1.0f, 1.0f);
                    song.start();
                    Toast.makeText(MainActivity.this, "Focus Gained, Ready Again", Toast.LENGTH_SHORT).show();
                    break;

                case AudioManager.AUDIOFOCUS_LOSS:
                    releaseResources();
                    audioManager.abandonAudioFocus(audioFocusChangeListener);
                    Toast.makeText(MainActivity.this, "Loss, Releasing Res", Toast.LENGTH_SHORT).show();
                    break;

                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    Toast.makeText(MainActivity.this, "Loss_Transient", Toast.LENGTH_SHORT).show();
                    song.pause();
                    break;
            }
        }
    };