1

我正在实施音乐播放器作为服务,并且希望在通知到达手机时降低音乐的音量。OnAudioFocusChangeListener无法处理“鸭子”的通知声音我的音频

这是我做的:

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,但是发生的情况相同,呼叫处理得好,通知没有。

我加入这个清单上.... 使用许可权的android:NAME =“android.permission.MODIFY_AUDIO_SETTINGS

我能做些什么,为什么通知不会改变AudioFocus ??

回答

2

Android audioFocus就像一个生态系统标志,建议应用程序可以在音频使用上“互相玩好”,但不是必需的,应用程序仍然可以播放音频,而不会抓取audioFocus

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

两个原因可能导致这个

  1. AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK被触发只有当其他应用程序称为audioFocus上AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK。手机应用程序做了,但其他应用程序没有播放通知时。

  2. 我在猜测:STREAM_RINGTONE audioFocus不影响STREAM_MUSIC或STREAM_CALL的audioFocus。如果属实,这是Android架构决定将RINGTONE视为辅助音频并且不会干扰主音频。

总之,通过设计和实现,STREAM_RINGTONE不会导致STREAM_MUSIC通过audioFocus发声。

+0

感谢Kevin的详细解答。我已经接受你的答案。我已经看到Google Play音乐没有实现这个选项,所以我保持冷静。我将为GPS和其他应用程序实现此选项。非常感谢你! – Juanjo