如果通知听不见,请不要降低音量?

Don' t duck audio volume if notification is inaudible?

处理可能 "ducked" 的 AudioFocus 丢失的标准方法如下:

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
            // Lower the volume
        } 
    }
};

但是,如果如图所示实现,即使通知是听不见的,您也会降低音量,例如在 Android 5.0+ 中打开 DnD 模式时。显然有几种不同的方法可以确定 DnD 是否处于活动状态:getAutomaticZenRule()(wtf?)、getCurrentInterruptionFilter()getNotificationPolicy()(需要特殊访问权限)。 None 其中 < API 23 个可用。

有没有一种简洁的方法可以判断流请求 AudioFocus 的可隐藏的流是否真的可以听到,而不会混淆上述所有内容? Google Play Music 似乎可以很好地处理这种情况。

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
             if (!(audioManager.getStreamVolume(AudioManager.STREAM_NOTIFICATION) == 0))
            // Lower the volume
        } 
    }
};

完成任务。