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