2014-10-09 19 views
2

我的應用作爲後臺服務運行,並可以根據某些事件給出通知。目前,播放通知的文件,我用的MediaPlayer在我的應用程序:抑制系統音頻音量播放來自應用內部的通知音頻

MediaPlayer mPlay = MediaPlayer.create(this, R.raw.sound); 
mPlay.start(); 

但是,如果一首歌曲已經在播放設備(音樂播放器,收音機等)上,並接收事件時,我的通知起,無論是平行地聽到聲音(音樂音頻&通知音頻)。

那麼,有沒有一種方法可以抑制系統音頻音量,以便我的通知能夠被清晰地聽到,並且一旦通知音頻結束,系統音頻可以再次播放?

感謝所有幫助

回答

1

我得到了這個問題的答案在下面的鏈接:

http://developer.android.com/training/managing-audio/audio-focus.html

我們需要請求音頻對焦(瞬時/永久)和那麼可以播放應用音頻:

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
// Request audio focus for playback 
int result = am.requestAudioFocus(afChangeListener, 
          // Use the music stream. 
          AudioManager.STREAM_MUSIC, 
          // Request permanent focus. 
          AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); 

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
    // Start playback. 
    Log.i(TAG, "...audiofocus granted...."); 
    MediaPlayer mPlay = MediaPlayer.create(this, R.raw.sound); 
    mPlay.start(); 
} 

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() { 
    public void onAudioFocusChange(int focusChange) { 
     if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) { 
      // Pause playback 
      Log.i(TAG, "....audiofocus loss transient in listener......"); 
     } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { 
      // Resume playback 
      Log.i(TAG, "....audiofocus gain in listener......"); 
     } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { 
      Log.i(TAG, "....audiofocus loss in listener......"); 
      //am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 
      am.abandonAudioFocus(afChangeListener); 
      // Stop playback 
     } 
    } 
}; 

希望它能幫助別人。