安卓-音频焦点

安卓-音频焦点

音频焦点

是什么

一个安卓系统肯定会有多个音源,音频焦点是用来处理这些音源的冲突

eg 在播放网易云的时候 打开抖音 网易云会自动暂停 并且网易云有提醒 其实是网易云做了处理

发者需要明确编写代码来请求和处理音频焦点的变化。

怎么做

主要涉及这2个对象

kotlin 复制代码
private var audioFocusRequest: AudioFocusRequest? = null
private var audioManager: AudioManager? = null

主要的要做的工作有3个

1.当应用开始播放音频时,开发者需要通过 AudioManager 请求音频焦点:

kotlin 复制代码
  if (audioFocus) { //audioFocus是自定义bool
            doPlaying()
        }else {
            val result = audioManager!!.requestAudioFocus(audioFocusRequest!!)
            if (result == AudioManager.AUDIOFOCUS_GAIN) {
                doPlaying()
                audioFocus = true
            }
        }

2.处理音频焦点变化:

就是实现OnAudioFocusChangeListener 并且set进去

kotlin 复制代码
        val audioFocusChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange: Int ->
             when (focusChange) {
                 AudioManager.AUDIOFOCUS_GAIN -> {
                     audioFocus = true
                     play()
                     Log.d(TAG, "AUDIO_FOCUS_GAIN")
                 }
                 AudioManager.AUDIOFOCUS_LOSS -> {
                     audioFocus = false
                     pause()
                     Log.d(TAG, "AUDIO_FOCUS_LOSS")
                 }
                 AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> {
                     audioFocus = false
                     pause()
                     Log.d(TAG, "AUDIO_FOCUS_LOSS_TRANSIENT")
                 }
                 AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK ->
                     Log.d(TAG, "AUDIO_FOCUS_LOSS_TRANSIENT_CAN_DUCK")
             }
         }
  audioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
             .setAudioAttributes(AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).build())
             .setOnAudioFocusChangeListener(audioFocusChangeListener)
             .build()

3.放弃音频焦点: 当你的应用不再需要播放音频时

音乐暂停 或者应用销毁等等

kotlin 复制代码
            audioManager!!.abandonAudioFocusRequest(audioFocusRequest!!)
相关推荐
Eric.Lee20219 分钟前
python opencv 将不同shape尺寸的图片制作video视频
python·opencv·音视频
seven27291 小时前
Android 适配之——targetSdkVersion 30升级到31-34需要注意些什么?
android·版本设置31-34·targetsdk
androidwork3 小时前
Kotlin Android单元测试MockK指南
android·kotlin
麻辣璐璐3 小时前
Kotlin并发请求的一些知识记录
android·kotlin
东风西巷3 小时前
MobiPDF:安卓设备上的专业PDF阅读与编辑工具
android·智能手机·pdf·软件需求
難釋懷5 小时前
Android开发-在应用之间共享数据
android·jvm·oracle
難釋懷7 小时前
Android开发-数据库SQLite
android·数据库·sqlite
androidwork8 小时前
Arrow库:函数式编程在Kotlin Android中的深度实践
android·java·kotlin
androidwork9 小时前
用 Kotlin 脚本(KTS)重塑 Android 工程效能:2000 字终极实践指南
android·开发语言·kotlin
灰色人生qwer10 小时前
使用WebSocket实现跨多个服务器传输音频及实时语音识别
websocket·音视频·实时传输