我的应用在后台作为服务运行,可以根据某些事件发出通知。目前,要播放通知文件,我在我的应用程序中使用MediaPlayer:
MediaPlayer mPlay = MediaPlayer.create(this, R.raw.sound);
mPlay.start();
但是,如果某首歌已在设备上播放(音乐播放器,收音机等),并且在收到该事件时播放了我的通知,则会同时听到两种声音(音乐音频和通知音频)。
那么,有没有办法可以抑制系统音量,以便清楚地听到通知,一旦通知音频结束,系统音频可以再次播放?
感谢您的帮助
答案 0 :(得分: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
}
}
};
希望它有所帮助。