[RK3288][Android6.0] AUDIO_BECOMING_NOISY作用
来源:互联网 发布:文件粉碎软件 编辑:程序博客网 时间:2024/06/05 10:34
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
系统中有个广播:
public static final String ACTION_AUDIO_BECOMING_NOISY = "android.media.AUDIO_BECOMING_NOISY";
它的作用是用来通知所有媒体播放应用程序声音将要从speaker播放了,因此大部分情况下应用程序就要暂停播放,以免声音从speaker播放从而影响到别人或者泄露隐私。
这个现象也可以从我们平常用有线耳机听歌时拔出耳机后音乐播放器暂停看到。
这种类似有限耳机的外设我们统称为安静外设。
实现:
拔出耳机时,会调用setWiredDeviceConnectionState():
String caller) { synchronized (mConnectedDevices) { //检查是否要发送BecomingNoisy广播 int delay = checkSendBecomingNoisyIntent(type, state); //耳机拔出处理,上面返回的delay决定对耳机拔出事件的处理延时。 queueMsgUnderWakeLock(mAudioHandler, MSG_SET_WIRED_DEVICE_CONNECTION_STATE, 0, 0, new WiredDeviceConnectionState(type, state, address, name, caller), delay); }}
checkSendBecomingNoisyIntent():
private int checkSendBecomingNoisyIntent(int device, int state) { int delay = 0; //发送广播条件:外设被移除并且是安静外设列表之一,耳机的情况成立。 if ((state == 0) && ((device & mBecomingNoisyIntentDevices) != 0)) { int devices = 0; //获取所有当前连接在系统上的安静外设 for (int i = 0; i < mConnectedDevices.size(); i++) { int dev = mConnectedDevices.valueAt(i).mDeviceType; if (((dev & AudioSystem.DEVICE_BIT_IN) == 0) && ((dev & mBecomingNoisyIntentDevices) != 0)) { devices |= dev; } } //相等就说明当前拔出的是最后一个安静外设了。 if (devices == device) { //这时就要通过所有媒体播放程序当拔出外设后声音即将从speaker出来了。 sendMsg(mAudioHandler, MSG_BROADCAST_AUDIO_BECOMING_NOISY, SENDMSG_REPLACE, 0, 0, null, 0); //延时1S,足够应用程序处理上面的广播事件 delay = 1000; } } }
当应用程序如果正在播放时收到MSG_BROADCAST_AUDIO_BECOMING_NOISY这个广播,那么就应该暂停应用程序,因为在延时1s之后,系统将处理耳机拔出事件,如果继续播放,那么声音将从speaker出来了!
阅读全文
1 0
- [RK3288][Android6.0] AUDIO_BECOMING_NOISY作用
- [RK3288][Android6.0] Camera驱动初始化流程
- [RK3288][Android6.0] Camera HAL流程小结
- [RK3288][Android6.0] StageFright解码流程小结
- [RK3288][Android6.0] USB 枚举过程小结
- [RK3288][Android6.0] USB UVC 驱动小结
- [RK3288][Android6.0] USB 枚举过程小结
- [RK3288][Android6.0] IRQ-domain.txt 翻译
- [RK3288][Android6.0] 串口驱动流程小结
- [RK3288][Android6.0] USB ECHI 驱动小结
- [RK3288][Android6.0] ION 驱动流程小结
- [RK3288][Android6.0] SettingsProvider数据库小结
- [RK3288][Android6.0] 音频调试方法小结
- [RK3288][Android6.0] Display中的Composition机制
- [RK3288][Android6.0] MediaCodec初始化过程小结
- [RK3288][Android6.0] WiFi之WifiWatchdogStateMachine
- [RK3288][Android6.0] SoftMAC和FullMAC区别
- [RK3288][Android6.0] Android中的Properties
- html笔记——html空格:HTML中      等6种空白空格的区别
- Unity 3D项目问题笔记 //03_unity 中的 Toggle 问题
- Vue 单文件中的数据传递
- 跟着姜少学Java基础编程之一:数据类型
- php文字插入数据库乱码取出正常问题
- [RK3288][Android6.0] AUDIO_BECOMING_NOISY作用
- Mac Shell脚本中使用echo的-n参数不生效
- 数据结构--希尔排序(ShellSort)思想与实现
- 第十三节:下拉选择框Select
- linux环境程序在链接时和运行时搜索动态库的顺序
- HDU 4757 树链剖分+可持久化字典树
- rcS启动
- Android/Java中汉字转成拼音
- SQL优化的几个方向