AudioManager
类有一个方法abandonAudioFocus()
和另一个方法requestAudioFocus()
。我想知道什么是音频焦点?如果AudioManager
对象获得了音频焦点或失去了音频焦点会发生什么?
谢谢!
AudioManager
类有一个方法abandonAudioFocus()
和另一个方法requestAudioFocus()
。我想知道什么是音频焦点?如果AudioManager
对象获得了音频焦点或失去了音频焦点会发生什么?
谢谢!
这与使用扬声器时的优先级有关,以避免同时播放多个音频或被覆盖。如果你调用requestAudioFocus()
,就表示你要控制音频焦点。然后你可以使用onAudioFocusChange(int focusChange)
来监听是否有其他音频尝试播放。你可能会强制失去音频焦点(例如在接听电话期间),但之后可以重新获得它。在完成后应该使用abandonAudioFocus()
。
AudioManager am = (AudioManager)getContext().getSystemService(AUDIO_SERVICE);
AudioManager.OnAudioFocusChangeListener focusChangeListener =
focusChange -> {
};
int result = am.requestAudioFocus(focusChangeListener,
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mp = new android.media.MediaPlayer();
mp.setOnCompletionListener(mediaPlayer -> {
am.abandonAudioFocus(focusChangeListener);
});
mp.setDataSource("/data/data/" + getContext().getPackageName() + "/rasa.wav");
mp.prepare();
mp.start();
}