位置: 编程技术 - 正文

音频焦点 (audio focus)(二)(音频焦点是什么)

编辑:rootadmin

推荐整理分享音频焦点 (audio focus)(二)(音频焦点是什么),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:音频焦点丢失,音频焦点是什么权限,音频焦点 获取失败怎么弄,音频焦点丢失,音频焦点是什么权限,音频焦点被抢占,音频焦点被抢占,音频焦点被抢占,内容如对您有帮助,希望把文章链接给更多的朋友!

什么叫音频焦点 (audio focus)?

android系统是一个多任务操作系统,因此同一时刻允许许多任务同时工作。但是这对音频类应用来说是个挑战,因为如果多个音频同时播放的话,很多情况下用户体验会相当的差!比如听音乐时,来了个电话,这时你的耳机里就是电话和音乐共同工作,绝对是个悲剧!

为了解决这个问题从android2.2开始引入audio focus的概念。当你需要播放音乐或者发送一个通知的时候,你可以去要求获得音频焦点。一旦获得,就可以自由的使用音频输出设备。但是同时它也在时时刻刻的监听着音频焦点的变化。当音频焦点变化时,你需要去合适的处理你的音频输出。

音频焦点工作的示例:

第一步

首先你要获得一个音频管理服务AudioManager

mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);

这个通常在service的oncreate中完成。

第二步

然后在合适的地方,比如播放音乐的按钮中放置获得音频焦点的代码

mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

requestAudioFocus方法可以获得音频焦点,其有三个参数,解释如下:

第一个参数 OnAudioFocusChangeListener:就是音频焦点变化时的监听器,这是音频焦点控制的重点。

第二个参数streamType:焦点获得之后的数据传输类型,这里是AudioManager.STREAM_MUSIC

第三个参数durationHint :告知系统,你要求获得音频焦点的用途,系统根据你所要求的类型来给其他监听者发出相应的焦点控制参数。有三种可选

AUDIOFOCUS_GAIN_TRANSIENT:只是短暂获得,一会就释放焦点,比如你只是想发个notification时用下一秒不到的铃声。

AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:只是背景获得,之前的音频焦点使用者无需释放焦点给我,我将与其共同使用。

AUDIOFOCUS_GAIN:我要求完全获得焦点,其他人需要释放焦点。比如我要播放音乐了,这时就要抢占整个音频焦点。

音频焦点 (audio focus)(二)(音频焦点是什么)

第三步

实现音频焦点监听器OnAudioFocusChangeListener,这个监听器会根据当前音频焦点的变化,调用onAudioFocusChange(int focusChange)方法,focusChange主要有以下四种参数:

AUDIOFOCUS_AGIN:你已经完全获得了音频焦点

AUDIOFOCUS_LOSS:你会长时间的失去焦点,所以不要指望在短时间内能获得。请结束自己的相关音频工作并做好收尾工作。比如另外一个音乐播放器开始播放音乐了(前提是这个另外的音乐播放器他也实现了音频焦点的控制,baidu音乐,天天静听很遗憾的就没有实现,所以他们两个是可以跟别的播放器同时播放的)

AUDIOFOCUS_LOSS_TRANSIENT:你会短暂的失去音频焦点,你可以暂停音乐,但不要释放资源,因为你一会就可以夺回焦点并继续使用

AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:你的焦点会短暂失去,但是你可以与新的使用者共同使用音频焦点

具体示例如下:

private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener(){

public void onAudioFocusChange(int focusChange) { switch(focusChange){ case AudioManager.AUDIOFOCUS_LOSS: if(isPlaying()){ //we do not need get focus back in this situation

//会长时间失去,所以告知下面的判断,获得焦点后不要自动播放 mPausedByTransientLossOfFocus = false;

pause();//因为会长时间失去,所以直接暂停 } break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT: case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: if(isPlaying()){ //短暂失去焦点,先暂停。同时将标志位置成重新获得焦点后就开始播放

mPausedByTransientLossOfFocus = true; pause(); } break; case AudioManager.AUDIOFOCUS_GAIN:

//重新获得焦点,且符合播放条件,开始播放 if(!isPlaying()&&mPausedByTransientLossOfFocus){ mPausedByTransientLossOfFocus = false; resume(); } break; } }};

最后

在适当的时候注销掉这个监听器比如在onDestroy()中

mAudioManager.abandonAudioFocus(mAudioFocusListener);到此整个音频焦点的控制就完成了

讲一个自己的故事,mPausedByTransientLossOfFocus 这个参数一开始没理解有什么作用,就没写。直到发现,我的音乐播放器在我已经手动暂停的情况下,总是在我打完电话后自动播放音乐,才发现他的作用。打完电话,手机就这么一路唱着歌在我的口袋里二&#;呵呵的欢乐着。自己还不知道,等再要用手机的时候发现电都被搞掉了不少,且无数人侧目看我是一个怎样的二货喜欢外放音乐.....庆幸手机里没有凤凰传奇的歌曲。

其实这个参数的作用就是可以让播放器仅仅在短暂失去音频焦点并重新获得后才开始播放音乐。而不是任何时候重新获得焦点都开始播放。

Android 音频焦点(Audio Focus)

popupWindow使用详解 popupWindow说起来简单,但是使用略麻烦,今天带大家来看看怎么使用,先来看看效果图:先来看看布局文件吧:RelativeLayoutxmlns:android="

app项目下文件的作用 新建一个android项目,可以看到如下的目录结构:src:存放源代码gen:是在新建android项目时输入的包名,R.java是开发工具自动生成的一个类,它会根据res

标签: 音频焦点是什么

本文链接地址:https://www.jiuchutong.com/biancheng/371064.html 转载请保留说明!

上一篇:沉浸式状态栏技术方案及其中的一些坑(安卓沉浸式状态栏框架)

下一篇:Android 音频焦点(Audio Focus)(android 音频焦点丢失 媒体按键)

  • 应收账款的期末余额在借方表示什么意思
  • 资产负债表的固定资产怎么计算
  • 科目余额表怎么导出
  • 企业无票支出怎么入账
  • 企业所得税成本调减怎么填
  • 应付账款暂估余额
  • 预付账款有二级科目嘛
  • 个体户每月超过30万
  • 通过扣缴义务人和综合申报哪个好
  • 转让折旧怎么算
  • 支付资金占用费怎么记账进项税
  • 费用利润率计算公式是什么意思
  • 法的分级
  • 营改增公告
  • 国家税务总局关于取消增值税扣税凭证
  • 工会经费的计税基础
  • 公司前三季度实现营业收入59.17亿元
  • 个人收到支票如何做账
  • 总资产净利率计算
  • 小规模普通发票可以抵扣吗
  • 增值税查补税款可以开发票吗
  • 专票入库单金额怎么算
  • 代账会计的职责
  • win7系统步骤
  • win7为什么还有人用
  • 酒店布草洗涤赔偿怎样折旧
  • 资产和负债的计税基础金额的确认思维导图
  • 计提本月固定资产折旧会计科目
  • 时序模型算法
  • 哈阿公路
  • 取得海关专用缴款书的会计分录
  • php guzzle 异步
  • 影视行业的会计好做吗
  • 猿起信息科技有限公司官网
  • 深究Python中的asyncio库-线程同步
  • 个体工商户建账办法最新
  • 基本户 变更
  • 合并报表的会计主体
  • 交通费怎么报销
  • mysql5.7.35安装配置教程
  • 建筑业成本核算流程
  • 出口退税在贷方,之后还交税吗
  • 证券公司收益凭证管理办法
  • 企业会计准则是属于什么
  • 母子公司收入合并
  • 金税四期的政策
  • 以前年度应收账款贷方余额如何调整
  • 利润表中的资产处置收益应该计入营业利润还是利润总额
  • 公司债券分为
  • 进项税额是怎么算的
  • 办理外经证后缴税怎么交
  • 结转周转材料成本
  • 出库未开发票
  • 在分公司签的合同能转到总公司吗?
  • 房屋装修费用的会计科目
  • sql删除查询结果
  • mysql5.7.17下载
  • Windows Server 2003服务器群集创建和配置指南
  • ezulumain.exe是病毒进程吗 ezulumain进程安全吗
  • 电脑死机是什么问题
  • xp系统电源设置在哪里
  • Linux下通过script 命令记录(数据库)操作步骤
  • win8操作系统安装
  • Win10 Mobile 10586升级后无限重启怎么办 硬重启帮您解决
  • lsm.exe是什么程序
  • Win10系统里的Smartscreen筛选器的使用以及开启方法
  • win10系统自带虚拟机无法启
  • Ubuntu 14.04 LTS中安装fcitx中文输入法的教程
  • win7命令提示符在哪
  • unity Toggle Groud
  • javascript的基本规范
  • js实现表单提交
  • nodejs mysql库
  • sqlyog使用
  • 临沂市有哪些国企央企
  • 无偿转让股权要交税吗
  • 吉林省电子税务局官网
  • 什么是企业融资,什么是政府融资
  • 普通发票每个月有限制吗
  • 车辆购置税交了怎么查询不到
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设