android 代码控制音量,Android的framework层音量控制原理分析--hot(key)处理
Android.media.AudioManager中包含了对android.media.AudioService的跨进程AIDL调用封装。
正常处理过程:
1.调整音量是通过AudioManager间接调用AudioService.adjustStreamVolume方法来完成逻辑处理;
2.AudioService调用VolumePanel画出音量调整界面,并发送音量变动广播消息,
3.StatusBarPolicy,接收广播消息判断是否在状态栏显示静音或振动图标。
问题点:
1.AudioManager如何接收音量调整事件?
答:PhoneWindowManager.interceptKeyBeforeQueueing处理的
WindowManagerService循环读取下面的消息再做分发到窗口接收,在消息分发前会有一个类做消息过滤处理,就是PhoneWindowManager.interceptKeyBeforeQueueing;
比如音量调整、Home键都在这个类里面做特殊处理,详细内容后面会在其它该当再补充
2.谁负责处理音量显示的?
答:AudioManager调用AudioService来显示的。事件触发在AudioManager,代码的执行实现在AudioService中。状态栏是SystemUI的APK包StatusBarPolicy中接收广播消息来处理的。
源码位置:
/frameworks/base/media/java/android/media/AudioManager.java
/frameworks/base/media/java/android/media/AudioService.java
/framework/base/core/java/Android/view/VolumePanel.java
/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java
AudioService.adjustStreamVolume方法完成以下三个功能:
一.音量调整
音量调整分为两步:先查看模式(Ring mode)是否需要调整? 然后再调用调整音量。
调整模式通过调用checkForRingerModeChange(oldIndex, direction);实现,
调整音量通过调用streamState.adjustIndex(direction)实现。
二.向用户显示调整音量的界面
调用mVolumePanel.postVolumeChanged(streamType, flags);发送音量变动消息,向用户显示改变结果。
调用过程VolumePanel.postVolumeChanged->VolumePanel.onVolumeChanged->VolumePanel.onShowVolumeChanged->mToast
三.广播音量有变动的系统事件
AudioService.sendVolumeUpdate(streamType);广播音量有改变的系统事件,状态栏根据这广播事件显示静音或振动图标
状态栏的静音或振动图标显示过程
StatusBarPolicy主要负责在静音模式(silent mode)和振动模式(vibrate mode)下在状态栏(status bar)的右方显示一个代表相应意义的图标。
一.系统启动后,StatusBarPolicy会注册一个Receiver,它可以接收很多种广播,其中就有AudioService在完成每一次的模式和音量更新时发出的两个广播事件
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver()//新一个广播接收类‘
filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);//添加接收的广播消息
filter.addAction(AudioManager.VIBRATE_SETTING_CHANGED_ACTION);
mContext.registerReceiver(mIntentReceiver, filter, null, mHandler);//注册一个Receiver,接收广播消息
二.接收广播,并调用updateVolume调整状态栏显示
else if (action.equals(AudioManager.RINGER_MODE_CHANGED_ACTION) ||
action.equals(AudioManager.VIBRATE_SETTING_CHANGED_ACTION)) {
updateVolume();//调用音量状态栏显示
}
android 代码控制音量,Android的framework层音量控制原理分析--hot(key)处理相关推荐
- Android wifi探究二:Wifi framework层源码分析
上一篇博客初步认识了wpa_supplicant的作用和使用方法,并且尝试着梳理了wifi的大框架,不过,java层的框架我们忽略了,没有分析,也就是说上一篇博客简单的指出了wifi代码的大框架,那么 ...
- android代码控制微信,Android转战微信小程序 - vscode安装和配置
前言 前一篇文章稍微总结了微信小程序的一些简单入门用法,这一篇文章说一下开发工具的选择,其实作为一个初次接触的萌新,微信开发者工具就能很好的作为日常的开发了,本人之所以选择vscode是刚入门时被一前 ...
- 从Android应用层及Framework层的角度分析WakeLock锁机制
从Android应用层及Framework层的角度分析WakeLock锁机制 本篇博客编写思路总结和关键点说明: 为了更加方便的读者阅读博客,通过导读思维图的形式将本博客的关键点列举出来,从而方便 ...
- android中如何打开指定卡上的数据连接开关,Android 代码控制手机数据网络的开关(5.0以上)...
Android 代码控制手机数据网络的开关 文章目录 android 5.0以前 5.0以后 Code android 5.0以前 Android 5.0以前使用ConnectivityManager ...
- android 方向控制界面,Android Studio屏幕方向以及UI界面状态的保存代码详解
项目:orientation package com.example.orientation; import android.os.bundle; import android.util.log; i ...
- android代码查找图像,Android平台上利用opencv进行图像的边沿检测
原标题:Android平台上利用opencv进行图像的边沿检测 近开始接触opencv for Android,从网上down了图像的边沿检测的代码. 测试图片: 在Android2.3.1模拟器上跑 ...
- android 摇杆控制方向键,Android Studio中实现摇杆
今天和大家分享一下Android Studio实现摇杆,原理很简单,代码中有对应的注释. 实现效果图 实现代码 package com.example.fragmentcar1.view; impor ...
- Android代码混淆处理,android代码混淆解决方案
以下包含了常见的基本代码与一些三方框架的混淆方案. ##########################基本混淆参数###################### # 代码混淆压缩比,在0~7之间,默认 ...
- android代码说明文档,android:label说明
文章目录 1. 说明 android:label 用于app 在切换activity的时候,自动更换左上角的显示 2. 代码架构 3. String.xml 字符串资源文件My Application ...
- android 代码加view,Android中将View添加至窗口的源码分析
本文主要内容是讲解一个视图View或者一个ViewGroup对象是如何添加至应用程序窗口中的.下文中提到的窗口可泛指我们能看到的界面,包括一个Activity呈现的界面(我们可以将之理解为应用程序窗口 ...
最新文章
- Android UI体验之全屏沉浸式透明状态栏效果
- f5申请并激活License
- 二值mask图像 + RGB原图 生成可视化分割结果; 从二值mask获取分割轮廓点
- 研究生的研究人员发展课程
- CF1245F Daniel and Spring Cleaning(等会了更新)
- 【CodeForces - 722D】Generating Sets(二分,贪心)
- LeetCode 216. 组合总和 III(排列组合 回溯)
- linux设备分层优点,Linux设备驱动的分层设计思想
- Spring Cloud 入门 之 Eureka 篇(一)
- 类的变量初始化是直接使用初始化器还是放在构造函数中?
- 通过反编译让SpecFlow支持多层属性值的验证
- 爬虫实例7 爬取豆瓣电影数据 (json+ajax)
- BSP和JSP里的UI元素ID生成逻辑 1
- android安装管理,android-使用下载管理器下载后安装apk,并退出...
- 纽约亮马河邮轮 - 从水上欣赏纽约迷人景色
- sklearn中predict_proba用法(注意和predict的区别)
- 服务器系统的监测,服务器监测系统
- asp.net错误解决:Unable to Validate Data in ASP.NET website
- 路缘石滑模机对于公路施工的适用性分析
- Unity 报错TLS Allocator ALLOC_TEMP_THREAD, underlying allocator ALLOC_TEMP_THREAD
热门文章
- 分布式协调服务Zookeeper集群搭建
- vector canoe 12/13/14/15 CANape 19 ASAP2 16 Canoe 15 lin flexray diva j1939 ethernet car2x scope
- AXI4 / AXI4-Lite / AXI4-Stream
- mysql数据库,oracle数据库中对字段的拼接方法
- 数据结构 - 约瑟夫环
- 艾默生分析仪1066-P-HT-60安装注意事项
- [Valkyrie网络测试仪-软件使用技巧] - Scheduler动作录制,定制打流过程(中途启停/调整带宽/使能部分流量)
- 服务器无法打开.rar文件,linux服务器无法解压rar文件的解决方法
- Failed to start SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high。。。
- 读《我的管理哲学 - 任正非》