自定义android音频焦点


接着上一篇音频策略的分析,接下来看下音频焦点

音频焦点机制是Android系统提供的一种约定:
1 播放声音前申请音频焦点,播放结束的时候释放音频焦点,
2 获得焦点才能开始播放,失去音频焦点应该暂停播放或者降低音量

一 看下申请音频焦点的粗略流程:


app端 调用AudioManager.requestAudioFocus ->bind->AudioService->MediaFocusControl.requestAudioFocus->
--->当前焦点是否是电话
--->是否使用外部音频策略处理
--->是否是多音频焦点管理
--->是否延迟获取焦点
->通知是否成功
以上就是整个调用流程
那些细节需要注意呢
1 这个流程是个同步调用机制,成功失败直接返回
2 延时焦点申请,会直接申请到电话对应的焦点栈下面,下次直接给它,后来的会冲掉之前的(能够申请延时焦点的只有当电话的时候才需要)
3 会有各种条件判断能否申请成功(比如,当前是否是电话,栈是否大于100等等)
4 当前app意外崩溃,会导致系统泄漏吗? 不会,会有linktodeath机制,自动释放焦点和内存

二 如何定制自己的音频焦点交互模型


 比如 我语音和导航交互的时候是不是可以兼容(同时获得焦点)
 上面的焦点流程已经贴出,里面会通过FocusInteraction来给出交互逻辑,里面通过直接修改 FocusInteraction里面的二维数组即可:
 private static final int[][] INTERACTION_MATRIX
 可以看下 焦点在NAVIGATION时候的焦点交互逻辑
 INTERACTION_CONCURRENT:兼容
 INTERACTION_EXCLUSIVE:申请者获得焦点,之前的放弃焦点
 
 // Focus holder: NAVIGATION
            {
                    INTERACTION_CONCURRENT, // MUSIC
                    INTERACTION_CONCURRENT, // NAVIGATION
                    INTERACTION_EXCLUSIVE, // VOICE_COMMAND
                    INTERACTION_CONCURRENT, // CALL_RING
                    INTERACTION_CONCURRENT, // CALL
                    INTERACTION_CONCURRENT, // ALARM
                    INTERACTION_CONCURRENT, // NOTIFICATION
                    INTERACTION_CONCURRENT, // SYSTEM_SOUND
                    INTERACTION_EXCLUSIVE, // EMERGENCY
                    INTERACTION_CONCURRENT, // SAFETY
                    INTERACTION_CONCURRENT, // VEHICLE_STATUS
                    INTERACTION_CONCURRENT, // ANNOUNCEMENT
            }

至此,framwork层audio经常改动的两大区域基本分析完毕,接下来要开始音频移植了

相关推荐

  1. 定义android音频焦点

    2024-03-25 06:40:06       40 阅读
  2. Android 音频焦点管理

    2024-03-25 06:40:06       62 阅读
  3. Android音频焦点

    2024-03-25 06:40:06       28 阅读
  4. Android Audio Focus 音频焦点

    2024-03-25 06:40:06       71 阅读
  5. Android 监听音频焦点变化

    2024-03-25 06:40:06       37 阅读
  6. android 音频焦点音频策略梳理

    2024-03-25 06:40:06       50 阅读
  7. Android Audio实战——音频焦点监听(十)

    2024-03-25 06:40:06       60 阅读
  8. Android14音频进阶之AAOS音频焦点(七十一)

    2024-03-25 06:40:06       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-25 06:40:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-25 06:40:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-25 06:40:06       87 阅读
  4. Python语言-面向对象

    2024-03-25 06:40:06       96 阅读

热门阅读

  1. 关于C/C++,Linux/MacOS/Windows 平台虚拟内存分配

    2024-03-25 06:40:06       37 阅读
  2. C语言学习笔记day14

    2024-03-25 06:40:06       36 阅读
  3. linux命令(CentOS7)yum provides

    2024-03-25 06:40:06       41 阅读
  4. 网络基础:构建你的数字世界之桥

    2024-03-25 06:40:06       36 阅读
  5. 面试宝典:MySQL索引进阶深度分析

    2024-03-25 06:40:06       38 阅读
  6. Android下的Touch事件分发详解

    2024-03-25 06:40:06       36 阅读
  7. 【Android 内存优化】Koom核心内存指标分析

    2024-03-25 06:40:06       40 阅读
  8. 【兆易创新GD32H759I-EVAL开发板】USB设备 介绍1

    2024-03-25 06:40:06       42 阅读
  9. 维吉尼亚(Vigenere)密码

    2024-03-25 06:40:06       38 阅读