1、深入理解Android 卷3 张大伟。

讲的是Android M的audiofocus,非常精辟,就是版本有些老。

和张大伟差不多,an 7.1:

cshandroid音频系统(5):AudioService之音频焦点_renshuguo123723的博客-CSDN博客

Android音频焦点详解(下)——源码详解 - landptf的个人空间 - OSCHINA - 中文开源技术交流社区

2、An P、Q差异不大:

2.1 如如何使用audiofocus:

Android10.0AudioFocus之如何使用(一)_l328873524的博客-CSDN博客

2.2 源码分析:

Android10.0AudioFocus之源码分析(二)_l328873524的博客-CSDN博客

2.3 AudioFocusRequest的说明

Android10.0AudioFocus之AudioFocusRequest_l328873524的博客-CSDN博客_android requestaudiofocusAndroid 9 Audio系统笔记:声音焦点AudioFocusRequest说明_biandan1231的专栏-CSDN博客_requestaudiofocusAndroid10.0AudioFocus之AudioFocusRequest_l328873524的博客-CSDN博客_android requestaudiofocus

2.4 audiofocus的场景分析:

音频焦点 AudioFocus与Audio Log分析_WhuSkypiea的博客-CSDN博客

3、Audiofocus的的集中状态

Android java层音频相关的分析与理解(三)调用相关_u012440406的专栏-CSDN博客

Gain/Loss:长期的持有、丢失音频焦点,比如:音乐场景;

Gain Transient/Loss Transient:短暂的持有、丢弃焦点,比如:闹钟、通话;

Gain Transient May Duck/Loss Transient Can Duck:短暂的持有、丢弃焦点,但是其他应用可以降低音量播放,比如:系统通知;车载导航。

Gain Transient Exclusive:短暂的持有焦点,但是是排他的,比如:录音。

从上面AudioFocus的状态可以看出,其实AudioFocus的状态是对应的。当后一个应用去GainAudioFocus时,前一个应用就相对应地LossAudioFocus。后一个应用以什么形式去Gain,前一个应该就会受到相应Loss的通知。但是,当前一个应用收到这个Loss通知时,应用怎么处理是应用内部的事情。因为AudioFoucs机制是一个建议性而不是强制性的机制。应用使用这种机制只是使用户体验更加好,而不采用这套机制,甚至不遵循这套机制,对应用与系统本身来是,是没有什么影响的。

4、audiofocus机制就是一个栈机制。

(1)音频焦点是使用堆栈方式管理的,可以有多个应用同时存在于堆栈中,栈顶的元素持有音频焦点

如上图所示,AudioFocus机制是以栈的形式实现,位于栈顶的应用能获取到AudioFocus从而能输出音频。非栈顶应用会暂时失去AudioFocus直至位于其上面的全部应用关闭或主动丢失AudioFocus。

这个的第二个图C、B、A,表示暂时失去了焦点,app会收到:

case AUDIOFOCUS_LOSS_TRANSIENT:

case AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:

对应图3的B如果app收到case AUDIOFOCUS_LOSS: 表示audiofocus被长期夺走,当前的app需要stop->abandon();

对应图4的C,如果app收到case AUDIOFOCUS_GAIN::表示audiofocus被归还了,app重新可以播放了。

private onAudioFocusChangeListener mAudioFocusListener = newOnAudioFocusChangeListener(){ //当AudioFocus发生变化时,这个函数将会被调用。其中参数focusChange指示发生了什么变化public void onAudioFocusChange(int focusChange){switch( focusChange) { /*AudioFocus被长期夺走,需要中止播放,并释放AudioFocus,这种情况对应于
抢走AudioFocus的申请者使用了AUDIOFOCUS_GAIN*/case AUDIOFOCUS_LOSS: stop();break; /*AudioFocus被临时夺走,不久就会被归还,只需要暂停,AudioFocus被归还后
再恢复播放 ;这对应于抢走AudioFocus的申请者使用了AUDIOFOCUS_GAIN_TRANSIENT*/case AUDIOFOCUS_LOSS_TRANSIENT: saveCurrentPlayingState(); pause();break; /*AudioFocus被临时夺走,允许不暂停,所以降低音量 ,这对应于抢走AudioFocus的
回放实例使用了AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK*/case AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:saveCurrentPlayingState();setVolume(getVolume()/2); break; /*AudioFocus被归还,这时需要恢复被夺走前的播放状态*/case AUDIOFOCUS_GAIN:restorePlayingState();break; }}

(2)申请audiofocus最终的结果:

5、audiofocus的流程图:

Audio AudioFocus流程_一杯咖啡的专栏-CSDN博客_audiofocus

Android Audio(六)—— AudioFocus_tudouhuashengmi的博客-CSDN博客

6、duck流程图

Android Audio(七)—— AudioFocus(duck)_tudouhuashengmi的博客-CSDN博客_audio duck

跟上图有些差异,最终call到Tracks.cpp

Audio Focus分析总结相关推荐

  1. Android 音频焦点(Audio Focus)

    原址 CONTENTS 引子 音频焦点 一个简单的示例 注意: 引子 说 Audio Focus 前先说个很简单需求:来电时暂停正在播放的音乐,电话结束时恢复播放. 看到这个需求,第一反应肯定是:监听 ...

  2. Android Audio Focus的应用(requestAudioFocus)

    网址:http://blog.csdn.net/dadoneo/article/details/8252933 FROM: http://www.linuxidc.com/Linux/2012-04/ ...

  3. android音频焦点Audio Focus

    为了便于理解,我们以android的8.0以前的版本为例,8.0以后有一定改动,但是基本思路一样. 关于管理音频焦点(8.0以前和更高版本)的官方文档:https://developer.androi ...

  4. Android开发之Audio播放:竞争Audio之Audio Focus的应用

    Android是多任务系统,Audio系统是竞争资源.Android2.2之前,没有内建的机制来解决多个程序竞争Audio的问题,2.2引入了称作AudioFocus的机制来管理对Audio资源的竞争 ...

  5. .Audio Focus机制以及AudioManager的使用

    原文地址:http://tanxiaoya105.blog.163.com/blog/static/210328019201272295457523/ 大纲: 一.介绍Audio Focus机制 二. ...

  6. Android Audio代码分析8 - AudioHardwareALSA::openOutputStream函数

    发现以前写的东西,对调用函数的展开放在了函数的前面,导致不方便找到原来代码及设置的函数参数. 以后打算稍作改动,把对被调函数的展开放在原代码的后面,这样看起来应该方便些. 闲言少叙,跳入代码. 前两天 ...

  7. 音频焦点 (audio focus)(二)

    什么叫音频焦点 (audio focus)? android系统是一个多任务操作系统,因此同一时刻允许许多任务同时工作.但是这对音频类应用来说是个挑战,因为如果多个音频同时播放的话,很多情况下用户体验 ...

  8. Managing Audio Playback之Managing Audio Focus

    同一时间可能要好多个app在播放audio,Android用audio focus 来避免app之前互相影响.只有持有audio focus的app才可以播放audio. 可以用requestAudi ...

  9. Android Audio代码分析(2): AudioPoilicyService 启动

    policy: 设备的选择 https://www.cxyzjd.com/article/VNanyesheshou/115659838 Android 音频源码分析--AudioTrack设备选择_ ...

最新文章

  1. android tab 悬停效果代码,Android 仿腾讯应用宝 之 Toolbar +Scroolview +tab滑动悬停效果...
  2. inconsistent use of tabs and spaces in indentation
  3. thinkphp 视图(二)变量输出、赋值和替换
  4. for each .. in ,for ... in , for ... of的用法
  5. 轻松删除所有安装的gem
  6. winform datagridview 打印
  7. 深度学习基础(一)起源
  8. QQuickWidget + QML编程实现酷炫动态动画效果
  9. 单调有界定理适用于函数吗_《实变函数》——论有界变差函数
  10. error C2220: 警告被视为错误 - 没有生成“object”文件
  11. Java编程判断一组学生成绩等级
  12. 零基础学Python--------第3章 流程控制语句
  13. ffmpeg 转换VC工具已经可以生成工程文件
  14. mysql时间函数now()_获得当前日期时间的mysql函数now()
  15. GJB用于试验的计算机软件,GJB9001C-2017版标准培训课件.ppt
  16. 武汉大学测绘学院工测带缓和曲线的圆曲线
  17. 苹果在中国失掉 iPad 商标
  18. 上交凯原|法学大陆天花板,本外校录取比1:9,双非含量高达12% | 上海交通大学凯原法学院2022届推免大数据
  19. 西瓜书(周志华)课后习题答案
  20. RKMPP库快速上手--(二)MPP关键配置

热门文章

  1. NYOJ 187 快速查找素数
  2. Excel批量导入图片并在右侧单元格备注名称
  3. (新手入门)AS3基于starling引擎移动开发之Starling入门
  4. 今晚直播 |重磅!Anchor Free系列算法强势来袭!
  5. 使screen支持滚动
  6. 《JavaScript高级程序设计 (第3版)》学习笔记42:chapter_11-3 HTML5
  7. 腾讯三面灵魂问题:如何理解MySQL索引底层数据结构
  8. 什么是测试即服务?(TaaS)
  9. 书写SQL必养成的好习惯
  10. linux jetty 查看 状态,linux jetty 状态