处理可以“躲避”的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()
(需要特殊访问权限)。其中没有一个可用于< API 23.
是否有一种简洁的方式来判断请求AudioFocus的流是否可以实际听到,而不会混淆上述所有内容?谷歌播放音乐似乎处理这个案件很好。
答案 0 :(得分:0)
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
}
}
};
完成这项工作。