2-管理Audio焦点(Managing Audio Playback)
Android系统Audio焦点的常用的操作方法如下:
无论你想暂时或是永久地申请audio焦点,你应该指定哪一个audio stream你将会使用。在你期望播放一段短时间的音频的时候申请一个瞬间的audio焦点(例如播放导航指示音),在你播放长时音频的时候申请永久的audio焦点(例如播放音乐)。
1 AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); 2 ... 3 4 // Request audio focus for playback 5 int result = am.requestAudioFocus(afChangeListener, 6 // Use the music stream. 7 AudioManager.STREAM_MUSIC, 8 // Request permanent focus. 9 AudioManager.AUDIOFOCUS_GAIN); 10 11 if(result ==AudioManager.AUDIOFOCUS_REQUEST_GRANTED){ 12 am.registerMediaButtonEventReceiver(RemoteControlReceiver); 13 // Start playback. 14 }
一旦你播放完音乐,一定要记住调用 abandonAudioFocus()方法,该方法会通知系统你不再需要audio焦点并且注销之前关联的 AudioManager.OnAudioFocusChangeListener监听器。在短暂地放弃焦点的情况下,android系统允许被打断的App继续播放音乐。
1 // Abandon audio focus when playback complete 2 am.abandonAudioFocus(afChangeListener);
在注册临时的audio焦点的时候你还有一个可选的操作方法:你是否想使用“ducking”机制。通常的,当一个正在播放音乐的app丢失audio焦点的时候,它就会立刻停止播放。通过使用“ducking”的方法来请求一个临时的焦点则可以避免上述情况,该机制允许正在播放音乐的App调低音量接着播放,直到audio焦点返还给它们,音量重新恢复。
1 // Request audio focus for playback 2 int result = am.requestAudioFocus(afChangeListener, 3 // Use the music stream. 4 AudioManager.STREAM_MUSIC, 5 // Request permanent focus. 6 AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); 7 8 if(result ==AudioManager.AUDIOFOCUS_REQUEST_GRANTED){ 9 // Start playback. 10 }
“ducking”机制特别适合于仅需要短暂地获取audio焦点的场景,利用在利用导航软件听取导航指示时。
其他的App无论何时如上述的方法请求audio焦点,是想获取永久的audio焦点或者是临时的audio焦点(不管是否支持“ducking”机制),它们都是通过它们注册的监听器来获取audio焦点的。
处理Audio焦点的丢失问题
如果你的App能够请求audio焦点,那么在众多的app都在请求audio焦点的时候它们会轮流地丢失焦点。你的App在丢失audio焦点的时候如何反应是根据丢失焦点的方式决定的。
你注册的audio焦点监听器通常会有一个 onAudioFocusChange()回调函数,它会携带一个描述audio焦点变化事件的变量。特别的,可能发生的audio焦点丢失事件与之前的焦点请求类型是对应的,有永久丢失,临时丢失以及允许“ducking”机制的临时丢失。
如果audio焦点丢失是永久的,应用程序已经被用户播放音乐了,那么你的app应该做出有效的响应。在实际操作中,通常是你的app需要停止播放,移除多媒体按钮事件的监听,允许正在播放音乐的播放器专一地处理那些事件,同时取消掉你自己的audio焦点。在这个时候,你应该设计出一种用户的操作(例如在你的app中点击播放),通过该操作来重新恢复你的音乐播放。
下面的代码片段展示出了在临时丢失audio焦点时,我们暂停我们的音乐播放,在重新获取audio焦点时,我们恢复播放。如果audio焦点是永久地丢失,则注销我们的多媒体按钮事件监听器,并且停止对audio焦点变化的监听。
1 AudioManager.OnAudioFocusChangeListener afChangeListener = 2 newAudioManager.OnAudioFocusChangeListener(){ 3 publicvoid onAudioFocusChange(int focusChange){ 4 if(focusChange == AUDIOFOCUS_LOSS_TRANSIENT){ 5 // Pause playback 6 }elseif(focusChange ==AudioManager.AUDIOFOCUS_GAIN){ 7 // Resume playback 8 }elseif(focusChange ==AudioManager.AUDIOFOCUS_LOSS){ 9 am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 10 am.abandonAudioFocus(afChangeListener); 11 // Stop playback 12 } 13 } 14 };
Duck!
“ducking”机制是在其他的app申请audio焦点的时候降低你的app使用的audio steam的音量,从而避免直接屏蔽掉你的app的一种机制。
下面的代码片段展示了在临时丢失audio焦点的时候调低你的app的音量,并且在重新获取到audio焦点的时候将音量恢复到之前的大小。
1 OnAudioFocusChangeListener afChangeListener =newOnAudioFocusChangeListener(){ 2 publicvoid onAudioFocusChange(int focusChange){ 3 if(focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){ 4 // Lower the volume 5 }elseif(focusChange ==AudioManager.AUDIOFOCUS_GAIN){ 6 // Raise it back to normal 7 } 8 } 9 };
转载于:https://www.cnblogs.com/xlk0101/p/5100265.html
2-管理Audio焦点(Managing Audio Playback)相关推荐
- Managing Audio Playback之Managing Audio Focus
同一时间可能要好多个app在播放audio,Android用audio focus 来避免app之前互相影响.只有持有audio focus的app才可以播放audio. 可以用requestAudi ...
- Managing Audio Playback
主任务链接地址:http://docs.eoeandroid.com/training/managing-audio/index.html 翻译:长剑耿介 完成时间:2012年9月5日 管理音频播放 ...
- 音频焦点 (audio focus)(二)
什么叫音频焦点 (audio focus)? android系统是一个多任务操作系统,因此同一时刻允许许多任务同时工作.但是这对音频类应用来说是个挑战,因为如果多个音频同时播放的话,很多情况下用户体验 ...
- android汽车音频焦点方案,管理音频焦点 | Android 开发者 | Android Developers
两个或两个以上的 Android 应用可同时向同一输出流播放音频.系统会将所有音频流混合在一起.虽然这是一项出色的技术,但却会给用户带来很大的困扰.为了避免所有音乐应用同时播放,Android 引入了 ...
- html5 audio 资源,HTML5 Audio(音频)
原标题:HTML5 Audio(音频) HTML5 提供了播放音频文件的标准. 互联网上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件(比如 Flash)来播放 ...
- Unity之iOS报错Audio effect Resonance Audio Renderer could not be found.
Unity之iOS报错Audio effect Resonance Audio Renderer could not be found. 报错 解决方法 链接 报错 如题,报错的详细信息如下: Aud ...
- Training—Managing Audio Playback
阅读:https://developer.android.com/training/managing-audio/index.html 系统将音频流分为了很多种:stream for playing ...
- Android官方开发文档Training系列课程中文版:管理音频播放之管理音频焦点
原文地址:http://android.xsoftlab.net/training/managing-audio/audio-focus.html 因为可能会存在多个APP播放音频,所以考虑它们之间的 ...
- 创建多媒体APP 之 音频播放:管理音频焦点
因为很多APP都会潜在需要去播放音频文件,所有要考虑多个APP在播放音频文件的时候会产生的影响,这个非常重要.为了防止同时有多个APP播放音频,android采用了音频焦点这个概念来节制APP对音频的 ...
最新文章
- 简单而又常用的基本的交换路由的一些配置命令
- 一个简单文本处理问题的多种解法
- C++ 值传递、指针传递、引用传递
- write up 加密:zip伪加密
- java setcontenttype_response.setContentType()在Java过滤器中重置
- 折纸的折痕(RVL中序遍历)
- Serf:Gossip Protocol
- Hibernate--关系映射和关联关系的CRUD
- python soup findall_Python之BeautifulSoup常用详细使用
- php动态交叉表,PHP Array交叉表实现代码
- unity3d点击屏幕判断是否击中场景中物体
- 【原】unity3D之Draw Call
- 疯狂的程序员 1-10
- 网易云音乐推荐中的用户行为序列深度建模
- codevs 1253 超级市场 DP 解题报告
- Cocos2d-x地图随精灵无限滚动与边缘检测----之游戏开发《赵云要格斗》(3)
- python处理svg_用Python/PIL读取SVG文件
- PanDownload 复活了!60MB/s!附下载地址
- 在vue添加lottie动画
- JAVA 图片地址路径转换 Base64 工具类