android 播放声音 停止其他,Android AudioManager处理两个播放器同时有声音,停止其中一个播放的问题,暂停其他的播放...

尽管某个时刻只有一个

activity

可以运行,

Android

却是一个多任务环境.这对使用音频的应用带来了特殊的挑战,因为只有一个音频输出而可能多个媒体都想用它.在

Android2.2

之前,没有内建的机制来处理这个问题,所以可能在某些情况下导致坏的用户体验.例如,当一个用户正在听音乐而另一个应用需要通知用户一些重要的事情时,用户可能由于音乐声音大而不能听的通知.从

Android2.2

开始,平台为应用提供了一个协商它们如何使用设备音频输出的途径,这个机制叫做音频焦点,AudioManager。

当你的应用需要输出像乐音和通知之类的音频时,你应该总是请求音频焦点.一旦应用具有了焦点,它就可以自由的使用音频输出.但它总是应该监听焦点的变化.如果被通知丢失焦点,它应该立即杀死声音或降低到静音水平(有一个标志表明应选择哪一个)并且仅当重新获得焦点后才恢复大声播放。

首先,注册一个焦点监听器OnAudioFocusChangeListener 。

privateAudioManager.OnAudioFocusChangeListener mAudioFocusChangeListener =null;

//Build.VERSION.SDK_INT表示当前SDK的版本,Build.VERSION_CODES.ECLAIR_MR1为SDK 7版本 ,

//因为AudioManager.OnAudioFocusChangeListener在SDK8版本开始才有。

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ECLAIR_MR1){

mAudioFocusChangeListener = newAudioManager.OnAudioFocusChangeListener() {

@Override

publicvoidonAudioFocusChange(intfocusChange) {

if(focusChange == AudioManager.AUDIOFOCUS_LOSS){

//失去焦点之后的操作

if(isPlaying()){

pause();

}

}elseif(focusChange == AudioManager.AUDIOFOCUS_GAIN){

//获得焦点之后的操作

}

}

};

}

要请求音频焦点,你必须从AudioManager mAudioMgr调用requestAudioFocus(),如下所示:

privatevoidrequestAudioFocus() {

if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.ECLAIR_MR1){

return;

}

if(mAudioMgr ==null)

mAudioMgr = (AudioManager) ApplicationEx.app

.getSystemService(Context.AUDIO_SERVICE);

if(mAudioMgr !=null) {

DLog.i(TAG, "Request audio focus");

intret = mAudioMgr.requestAudioFocus(mAudioFocusChangeListener,

AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

if(ret != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {

DLog.i(TAG, "request audio focus fail. "+ ret);

}

}

}

放弃焦点

privatevoidabandonAudioFocus() {

if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.ECLAIR_MR1){

return;

}

if(mAudioMgr !=null) {

DLog.i(TAG, "Abandon audio focus");

mAudioMgr.abandonAudioFocus(mAudioFocusChangeListener);

mAudioMgr = null;

}

}

参数focusChange告诉你音频焦点如何发生了变化,它可以是以上几种值(它们都是定义在AudioManager中的常量):

AUDIOFOCUS_GAIN:你已获得了音频焦点.

AUDIOFOCUS_LOSS:你已经丢失了音频焦点比较长的时间了.你必须停止所有的音频播放.因为预料到你可能很长时间也不能再获音频焦点,所以这里是清理你的资源的好地方.比如,你必须释放MediaPlayer.

AUDIOFOCUS_LOSS_TRANSIENT:你临时性的丢掉了音频焦点,很快就会重新获得.你必须停止所有的音频播放,但是可以保留你的资源,因为你可能很快就能重新获得焦点.

AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:你临时性的丢掉了音频焦点,但是你被允许继续以低音量播放,而不是完全停止.

当第三方播放器也使用了这个机制的话,当你的应用获取声音焦点之后,第三方播放器失去焦点,做了暂停处理,即会停止播放。这样就不会出现两个播放器同时播放音乐的情况了。而如果第三方播放器没有经过处理,不管有没有焦点都一直播放,那就没有办法了。 =。=||

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据仓库定义

数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的&#xff08;Subject Oriented&#xff09;、集成的&#xff08;Integrated&#xff09;、相对稳定的&#xff08;Non-Volatile&#xff09;、反映历史变化&#xff08;Time Variant&#xff09;的数据集合&…

C# 操作 Word 修改word的高级属性中的自定义属性

为 Microsoft Word 创建自动化客户端 启动 Visual Studio .NET。在文件菜单上&#xff0c;单击新建&#xff0c;然后单击项目。从 Visual C# 项目类型中选择 Windows 应用程序。默认情况下会创建 Form1。添加对 Microsoft Word 对象库的引用。为此&#xff0c;请按照下列步骤操…

大型门户网站的可伸缩性架构设计

大型门户网站的可伸缩性架构设计2009-12-28 来源&#xff1a;网络我们知道&#xff0c;对于一个大型门户网站来说&#xff0c;可伸缩性是非常重要的&#xff0c;怎么样在纵向和横向有良好的可伸缩性&#xff0c;就需要在做架构设计的时候考虑到一个分的原则&#xff0c;我想在多…

html中dd dt的效果,html中dt dd

html中&#xff0c;dl,dt,dd怎么使用html中,dl和dd和dt标签是什么意思,什么时候需要用定义列表的意思 一般用在图文并排的时候 应网友提问。html中&#xff0c;dl和dd和dt标签是什么意思&#xff0c;什么时候需要html中&#xff0c;dl和dd和dt标签的意思如下&#xff1a;dl标签…

mysql存储引擎优化参数

MySQL配置参数优化本文来自道森学习笔记&#xff0c;版权归 http://wubx.net/ 所有MyISAM存储引擎优化涉及参数如下&#xff1a;Key_buffery_sizeConcurrent_insert 2 | WAAYSBulk_insert_buffer_size8MMyisam_recover_optionsFORCEMyisam_recover_threads1Myisam_sort_buffer…

实现 laravel 的artisan

laravel 的 artisan 命令行太好用了&#xff0c;换个框架没有这个功能&#xff0c;于是自己学习实现一些&#xff0c;直接上代码 新建目录 -artisan --bin --src 进入artisan composer init composer require symfony/console #!/usr/bin/env php<?phpuse Symfony\Comp…

cdev 结构体与字符设备的注册

在 linux 2.6内核中&#xff0c;使用 cdev结构体描述字符设备&#xff0c;cdev 的定义在 <linux/cdev.h> 中可找到&#xff0c;其定义如下&#xff1a;引用 struct cdev { struct kobject kobj; struct module *owner; const struct file_operation…

JVM调优总结(七)-典型配置举例1

以下配置主要针对分代垃圾回收算法而言。 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制&#xff1a;相关操作系统的数据模型&#xff08;32-bt还是64-bit&#xff09;限制&#xff1b;系统的可用虚拟内存限制&#xff1b;系统的可用物理内存限制。32位系统下&am…

Nginx多种负载均衡策略搭建

背景介绍 上篇介绍了利用Nginx反向代理实现负载均衡&#xff0c;本文详细讲述Nginx下的几种负载均衡策略。 轮询 轮询&#xff0c;顾名思义&#xff0c;就是轮流请求&#xff0c;基于上篇文章的介绍&#xff0c;我们将负载均衡策略聚焦于default.conf文件的upstream。 upstream…

基于GCCAVR的TLC2543读写程序----模拟SPI方式实现

TLC2453的操作也比较简单&#xff0c;通过模拟的方式实现只需要看一下时序图把时序搞对即可。 在硬件SPI中&#xff0c;读和写实可以通过硬件同步进行的&#xff0c;因此在写入本次命令字时可以同时读取上一次命令的数据&#xff0c;在模拟SPI的方式中&#xff0c;读和写无法同…

html设置点击事件相同,html有多个类名相同的div,如何给每个div绑定click事件并区分?...

1.页面有9个div&#xff0c;类名都是.flag&#xff0c;然后想给每个div都绑定一个click事件&#xff0c;点击.flag时&#xff0c;获取其后代元素.count的值和.ds-subtitle的rel属性。下面这样的写法请问哪里出错了&#xff1f;请看开始三行后面注释$(document).ready(function(…

利用Apache POI读取并解析Excel的数据

/* * Created on 2010-12-9 * java读取excel文件 * */import java.io.FileInputStream;import java.io.FileOutputStream;//import java.text.DecimalFormat; import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.…

计算机语言学 考研学校,2019考研专业:语言学及应用语言学

中国教育在线讯 2019考研&#xff0c;对考研专业了解越多&#xff0c;考研人越易选出适合自己的方向&#xff0c;中国教育在线考研频道将陆续推出2019考研业解析系列&#xff0c;进行基本的专业介绍&#xff0c;探析就业前景与方向&#xff0c;推荐知名院校&#xff0c;介绍相近…

我感觉这个书上的微信小程序登陆写得不好

基本功能是OK&#xff0c;但是感觉传的数据太多&#xff0c;不安全&#xff0c;需要改写。 App({d: {hostUrl: http://www.test.com/index.php, //请填写您自己的小程序主机URLappId: "xxx",appKey: "xxx",ceshiUrl: http://www.test.com/index.php,//请填…

计算机组装维修中级试题,计算机维修工中级理论知识试卷.doc

计算机维修工中级理论知识试卷.doc职业技能鉴定国家题库计算机维修工中级理论知识试卷注 意 事 项本试卷依据2007年颁布的《计算机(微机)维修工》国家职业标准命制&#xff0c;考试时间&#xff1a;90分钟请首先按要求在答题纸上填写您的姓名、准考证号、参考等级、参考工种。请…

day05 selenium库的基础使用

selenium请求库实现爬取京东商品信息:    导入selenium库 利用try-catch实现对是否能连接进行异常检测与捕获 get方式向京东主页发送请求 通过id查找iput输入框 send_kyes为当前标签传值 通过send_keys按回车键实现查询 通过find_elements_by_class_name爬取每个商品   …

java入门5-asp.net关注

第 二 章   数 据 类 型 2.1 数 据 类 型 数 据 类 型 指 明 了 变 量 或 表 达 式 的 状 态 和 行 为 。 Java 的数据 类 型 如 下 所 示 : Java不 支 持 C、 C中 的 指 针 类 型 、 结 构 体 类 型 和 共 用 体类型 。 本 章 我 们 主 要 介 绍 简 单 类 型 。 2.2 常…

iOS CoreAnimation

为什么80%的码农都做不了架构师&#xff1f;>>> 前言&#xff1a;这篇文章太全了&#xff0c;忍不住就转了&#xff0c;原地址 CoreAnimation&#xff0c;另外前面写过一篇简单的动画IOS简单动画 核心动画,开发人员可以为他们的应用创建动态用户界面,而无需使用低级…

计算机应用基础126题,2015-2016年全国计算机应用基础总复习.

20152015--2016年全国年全国计算机应用基础总复计算机应用基础总复习人的生命是有限的,但是为人民服务是无限的,我要把有限的生命投入到无限的为人民服务中去笔试分为四种题型&#xff1a;(1)单选题&#xff1b;(2)判断题&#xff1b;(3)双选题&#xff1b;(4)多选题。在这里给…

asp.net MVC 权限设计(续)

asp.net MVC 权限设计一文中没有demo放出来,应大家的要求&#xff0c;这里补充上文并放出demo。 几点说明&#xff1a; 1、基于将角色与controller、action相关联来判断用户是否有权 2、通过自定义AuthorizeAttribute实现 3、demo 仅供参考&#xff0c;一些规则可以根据实际情况…