该类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();
}