我正在将音乐播放器作为一种服务实现,并希望在通知到达手机时降低音乐的音量。
这就是我的所作所为:
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?
答案 0 :(得分:2)
Android audioFocus就像一个生态系统旗帜。建议所以应用程序可以“玩得很好”#34;音频使用方面相互之间,但不是必需的。应用程序仍然可以在不抓取audioFocus的情况下播放音频。
这也是本机行为。通知不应暗淡/暂停/停止音乐或呼叫音频。您可以通过原生Android应用播放音频并触发短信通知声音进行验证。
有两个原因可能导致此
仅当其他应用在AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK上调用audioFocus时,才会触发AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK。手机应用程序没有,但其他应用程序在播放通知时没有。
我推测这个:STREAM_RINGTONE audioFocus不会影响STREAM_MUSIC或STREAM_CALL的audioFocus。如果为true,则这是Android架构决定将RINGTONE视为辅助音频而不干扰主音频。
总之,通过设计和实现,STREAM_RINGTONE会且不应该导致STREAM_MUSIC通过audioFocus消失。