申请音频焦点
private var mAudioFocusRequest: AudioFocusRequest? = null
private fun requestAudioFocus() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (mAudioFocusRequest == null) {
val attr = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
mAudioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setAudioAttributes(attr)
.setOnAudioFocusChangeListener(this)
.build()
}
mAudioFocusRequest?.apply {
(App.instance.getSystemService(Context.AUDIO_SERVICE) as AudioManager).let { manager ->
manager.requestAudioFocus(this).let {
when (it) {
AudioManager.AUDIOFOCUS_REQUEST_FAILED -> {
// 申请焦点失败
}
AudioManager.AUDIOFOCUS_REQUEST_GRANTED -> {
// 申请成功
}
AudioManager.AUDIOFOCUS_REQUEST_DELAYED -> {
// 稍后获取
}
}
}
}
}
} else {
(App.instance.getSystemService(Context.AUDIO_SERVICE) as AudioManager).requestAudioFocus(
this,
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN
)
}
}
放弃音频焦点
private var mAudioFocusRequest: AudioFocusRequest? = null
private fun abandonAudioFocus() {
mAudioFocusRequest?.apply {
(App.instance.getSystemService(Context.AUDIO_SERVICE) as AudioManager)
.abandonAudioFocusRequest(this)
}
mAudioFocusRequest = null
}
音频焦点变化监听
override fun onAudioFocusChange(focusChange: Int) {
// 拍摄视频:>-2>1
when (focusChange) {
AudioManager.AUDIOFOCUS_GAIN -> {
// 长时间持有焦点
}
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT -> {
// 暂时焦点
}
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK -> {
// 共享焦点,其他音频降低
}
AudioManager.AUDIOFOCUS_LOSS -> {
// 长时间失去焦点
}
AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
// 暂时失去焦点
}
}
}