无法处理OnAudioFocusChangeListener中的通知声音" duck"我的音频

时间:2014-03-12 18:50:45

标签: android service notifications listener android-audiomanager

我正在将音乐播放器作为一种服务实现,并希望在通知到达手机时降低音乐的音量。

这就是我的所作所为:

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

int result = audioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC,
                    AudioManager.AUDIOFOCUS_GAIN);

我的听众是:

        private AudioManager.OnAudioFocusChangeListener mOnAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
        public void onAudioFocusChange(int focusChange) {

            switch (focusChange) {
                case AudioManager.AUDIOFOCUS_GAIN:

                    if (!mediaPlayer.isPlaying()){
                        mediaPlayer.start();
                        mediaPlayer.setVolume(1.0f, 1.0f);
                    }
                    break;

                case AudioManager.AUDIOFOCUS_LOSS:
                    // Lost focus for an unbounded amount of time: stop playback and release media player
                    if (mediaPlayer.isPlaying()) mediaPlayer.stop();
                    mediaPlayer.release();
                    mediaPlayer = null;
                    break;

                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    if (mediaPlayer.isPlaying()) mediaPlayer.pause();
                    break;

                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    // Lost focus for a short time, but it's ok to keep playing
                    // at an attenuated level
                    if (mediaPlayer.isPlaying()) mediaPlayer.setVolume(0.2f, 0.2f);
                    break;
                default:break;
            }
        }
    };

当有来电时,它完美无缺。当我收到短信,gmail,whatsapp等通知时,听众不会捕获该事件。

我也尝试过:

 AudioManager audioManager = (AudioManager)getApplicationContext(). getSystemService(Context.AUDIO_SERVICE);
            int result = audioManager.requestAudioFocus(mOnAudioFocusChangeListener, AudioManager.STREAM_MUSIC,
                    AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK);

就像这里解释一样:Managin Audio Focus

但是听众并没有听取通知输入。

我也尝试在服务中实现AudioManager.OnAudioFocusChangeListener但发生相同,调用处理得很好,通知没有。

我在清单上添加了这个....  uses-permission android:name =" android.permission.MODIFY_AUDIO_SETTINGS

我该怎么办?为什么通知不会改变AudioFocus?

1 个答案:

答案 0 :(得分:2)

Android audioFocus就像一个生态系统旗帜。建议所以应用程序可以“玩得很好”#34;音频使用方面相互之间,但不是必需的。应用程序仍然可以在不抓取audioFocus的情况下播放音频。

这也是本机行为。通知不应暗淡/暂停/停止音乐或呼叫音频。您可以通过原生Android应用播放音频并触发短信通知声音进行验证。

有两个原因可能导致此

  1. 仅当其他应用在AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK上调用audioFocus时,才会触发AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK。手机应用程序没有,但其他应用程序在播放通知时没有。

  2. 我推测这个:STREAM_RINGTONE audioFocus不会影响STREAM_MUSIC或STREAM_CALL的audioFocus。如果为true,则这是Android架构决定将RINGTONE视为辅助音频而不干扰主音频。

  3. 总之,通过设计和实现,STREAM_RINGTONE会且不应该导致STREAM_MUSIC通过audioFocus消失。