当前位置: 首页 > article >正文

安卓-音频焦点

安卓-音频焦点

    • 音频焦点
      • 是什么
      • 怎么做

音频焦点

是什么

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

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

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

怎么做

主要涉及这2个对象

private var audioFocusRequest: AudioFocusRequest? = null
private var audioManager: AudioManager? = null

主要的要做的工作有3个

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

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

2.处理音频焦点变化:

就是实现OnAudioFocusChangeListener 并且set进去

        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.放弃音频焦点: 当你的应用不再需要播放音频时

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

            audioManager!!.abandonAudioFocusRequest(audioFocusRequest!!)

http://www.kler.cn/a/301487.html

相关文章:

  • Python中的正则表达式教程
  • SQL注入注入方式(大纲)
  • JavaScript中的reduce函数
  • django解决跨域问题
  • GIT将源码推送新分支
  • C++之内存管理
  • 动手学深度学习(pytorch)学习记录30-含并行连接的网络(GoogLeNet)[学习记录]
  • 一天一道算法题day02
  • UEFI——使用标准C库
  • springboot项目实现分库
  • 使用ansible的剧本制作salt-master与salt-minion的安装与启动服务过程
  • 人工智能如何改变我们的工作方式
  • Leetcode Hot 100刷题记录 -Day12(轮转数组)
  • Scratch中秋节游戏——玉兔收集月饼
  • 上/下三角矩阵的压缩存储
  • QML与widget
  • 如何增加Google收录量?
  • [数据结构]红黑树之插入操作(RBTree)
  • 衡石分析平台使用手册-部署前准备
  • flink中disableChaining() 的详解
  • Redis面对数据量庞大处理方法
  • Jmeter_循环获取请求接口的字段,并写入文件
  • 如何实现视频数据的PES打包和传输?
  • 【JavaSE】基础学习以及简单的计算器应用程序GUI实现
  • 【Kubernetes】常见面试题汇总(十)
  • ffmpeg编译连接报错 undefined reference to `uncompress‘