安卓-音频焦点

安卓-音频焦点

音频焦点

是什么

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

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!!)
相关推荐
PixelMind4 小时前
【超分辨率专题】FlashVSR:单步Diffusion的再次提速,实时视频超分不是梦!
深度学习·音视频·超分辨率·vsr
2501_937193144 小时前
技术加持!PLB-TV:HDR10+UDP 传输
android·源码·源代码管理·机顶盒
霸王大陆6 小时前
《零基础学 PHP:从入门到实战》模块十:从应用到精通——掌握PHP进阶技术与现代化开发实战-2
android·开发语言·php
Blossom.1186 小时前
基于多智能体强化学习的云资源调度系统:如何用MARL把ECS成本打下来60%
人工智能·python·学习·决策树·机器学习·stable diffusion·音视频
赖small强9 小时前
【音视频开发】镜头畸变矫正 (LDC) 技术指南
音视频·ldc·广角镜头·桶形畸变
低调小一10 小时前
在 Android 上获取视频流逐帧时间戳并与 GPS/IMU 对齐(CameraX 实践)
android
Android_Trot10 小时前
Flutter android 多渠道配置,多包名、icon、等配置。
android·flutter
小馒头学python11 小时前
企业级视频处理:openEuler 环境 FFmpeg 多场景转码性能实战
ffmpeg·音视频·openeuler
zhangphil11 小时前
Android性能:trace上的锁竞争monitor contention with owner at
android