android 音频抢占问题

复制代码
private val mAudioManager: AudioManager by lazy {
    Utils.getApp().getSystemService(Context.AUDIO_SERVICE) as AudioManager
}
复制代码
fun checkSpeakerOn():Boolean {

    val afChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange ->
            if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT ||
                focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK
            ) {
                // 音频焦点暂时丢失,可能是因为多媒体占用
                LogUtils.d(TAG, "Temporarily lost audio focus due to media play")
            } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
                // 永久失去音频焦点,可能是因为多媒体或其他应用正在播放
                LogUtils.d(TAG, "Permanently lost audio focus")
            } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
                // 重新获得音频焦点
                LogUtils.d(TAG, "Gained audio focus")
            } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
                // 暂时失去焦点,但允许降低音量而不是停止播放
                LogUtils.d(TAG, "Temporarily lost audio focus, can duck")
            }
        }

    val result: Int = mAudioManager.requestAudioFocus(
        afChangeListener,
        AudioManager.STREAM_MUSIC,
        AudioManager.AUDIOFOCUS_GAIN
    )
    return if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        // 成功获取到音频焦点
        true
    }else
        false
}
相关推荐
雨白5 小时前
指针与数组的核心机制
android
黄林晴9 小时前
Room 3.0 正式发布!包名彻底重构,KMP 成为核心主线
android·android jetpack
三少爷的鞋10 小时前
Kotlin 协程环境下的 DCL 懒加载:别把线程时代的经验直接搬过来
android
plainGeekDev10 小时前
Gson → kotlinx.serialization
android·java·kotlin
CYY951 天前
Compose 入门篇
android·kotlin
杉氧1 天前
Compose 时代的 MVI 架构:如何用单向数据流驱动复杂 UI?
android·架构·android jetpack
杉氧1 天前
Modifier 的艺术:为什么链式调用的顺序决定了UI 的生命周期?
android·架构·android jetpack
李斯维1 天前
腾讯 XLog 日志框架 Android 端接入
android·android studio·android jetpack
黄林晴1 天前
Kotlin Toolchain 0.11 发布:Amper 正式更名,统一 kotlin 命令
android·kotlin