android 勿扰模式代码,Android N Zen Mode (勿扰模式)设置流程
Android N去除了情景模式,取而代之的是勿扰模式。勿扰模式的入口有两处,下拉栏和设置声音里面。下面我们就从设置声音入口,看看勿扰模式的设置流程。
首先,勿扰模式的首页有三种选项,分别是仅允许优先打扰内容、自动规则和屏蔽视觉打扰。各页面分别对应的类文件如下:
首页 :ZenModeSettings.java 用于设置入口,更新一些summary;
仅允许优先打扰内容:ZenModePrioritySettings.java 设置可以打扰的内容;
自动规则:ZenModeAutomationSettings.java 有时间规则和时间规则;
屏蔽视觉打扰:ZenModeVisualInterruptionSettings.java 通知是否显示屏幕
我们主要从ZenModePrioritySettings.java中分析流程,其他界面类似。
首先在OnCreate方法中获得到了一个Policy(notificationManager的内部类)的对象,然后对各个Preference进行监听,获得的值通过savePolicy(...)来保存。savePolicy(...)方法内部,其实是调用了NotificationManager的setNotificationPolicy方法。
NotificationManager.java
在setNotificationPolicy(...)方法内部,通过AIDL方式获得了一个service,该service的具体实现是在NotificationManagerService.java中。由service调用setNotificationPolicy(...)。
NoticationManagerService.java
IBinder的实现类中,被调用的方法setNotificationPolicy(...)里面,可以看到代码mZenModeHelper.setNotificationPolicy(policy),一步步深入。
ZenModeHelper.java
public void setNotificationPolicy(Policy policy) {
if (policy == null || mConfig == null) return;
synchronized (mConfig) {
final ZenModeConfig newConfig = mConfig.copy();
newConfig.applyNotificationPolicy(policy);
setConfigLocked(newConfig, "setNotificationPolicy");
}
}
获得了一个ZenModeCogfig的对象,并调用applyNotificationPolicy方法。
ZenModeConfig.java
applyNotificationPolicy(Policy policy),该方法主要是对Policy进行解析,将解析出来的值赋给各个变量。然后在回到ZenModeHelper.java。
ZenModeHelper.java
setConfigLocked(newConfig, "setNotificationPolicy")方法中先对配置文件进行空判断和有效判断。然后判断配置文件相对于原始是否有变得,如果有,调用dispatchOnConfigChanged(),该方法内部是一个回调。所以我们再次回到NotificationManagerService.java
NotificationManagerService.java
找到onConfigChanged(),里面调用了savePolicyFile(),该方法通过handle发送消息,处理该消息时调用handleSavePolicyFile(),该方法内部调用writePolicyXml(),该方法通过ZenModeHelper对象再继续调用writeXml(...);于是再次回到ZenModeHelper.java
ZenModeHelper.java
找到writeXml(...)方法,里面遍历每一个ZenModeConfig对象,逐个调用ZenModeConfig对象的writeXml(...)方法。再次回到ZenModeConfig.java。
ZenModeConfig.java
恭喜你,终于到头了。原来真正写数据的地方在这里。系统将之前解析出来的数据信息,也就是用户设定的各种勿扰的配置信息写在xml里面。好了,到此为止,另外如何使这些数据生效,请等待笔者的下一篇文章吧!
android 勿扰模式代码,Android N Zen Mode (勿扰模式)设置流程相关推荐
- android 勿扰模式代码,android 勿扰模式代码结构简析
勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...
- android 勿扰模式代码,android Lollipop勿扰模式
android的L新版本中增加了"打扰"的新功能,相信很多同学搞不明白.找了一篇介绍勿扰模式很好的文章,可惜是英文的,现翻译如下,相信读完此问,你会理解android对勿扰模式的设 ...
- opengl android 纹理贴图 代码,Android 使用opengl es的纹理贴图白屏问题请教。
各位大侠好: 我在使用open gl es的做显示的时候,发现一个问题,请各位帮助一下,谢谢. 环境:opengl es 1.x,2D的模式显示纹理图片. 在LG-P990,HTC-C510E上显示附 ...
- android 图片变颜色代码,Android -对图片Drawable进行变色
Android 图片DrawableCompat利用setTint()对图片Drawable进行变色 1.利用color资源对Drawable变色 Drawable对象的来源不限制,可以是从资源get ...
- Android微信通讯录界面代码,Android中使用Expandablelistview实现微信通讯录界面
之前的博文<Android 中使用ExpandableListView 实现分组的实例>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的 ...
- android下拉框代码,Android下拉列表spinner的实例代码
spinner组件有点类型于HTML中的下拉框的样子,让用户每次从下拉框中选取一个,本文为大家分享了Android下拉列表spinner的具体实现代码,供大家参考,具体内容如下 mian.xml xm ...
- android实时监控屏幕代码,Android 屏幕切换监听的实例代码
昨天,我试着在屏幕切换时,使View显示在不同的位置,在网上搜索了一些资料,自己做了一段时间,终于完成了功能. 由于屏幕切换会调用activity的各个生命周期,所以需要在manifest的activ ...
- Android运行ListView的代码,Android ListView组件详解及示例代码
Android 列表组件 ListView 列表组件是开发中经常用到组件,使用该组件在使用时需要为它提供适配器,由适配器提供来确定显示样式和显示数据. 下面看一个例子: 新建一个项目Lesson8_L ...
- android 多闹钟实现代码,Android编程实现闹钟的方法详解
Android编程实现闹钟的方法详解 发布时间:2020-09-30 10:18:02 来源:脚本之家 阅读:75 作者:Jacob-wj 本文实例讲述了Android编程实现闹钟的方法.分享给大家供 ...
最新文章
- 目标反射回波检测算法及其FPGA实现 之一:算法概述
- LA4234 Binary Clock(进制转换)
- 【PC工具】更新文件夹多文件群体比较工具WinMerge
- 利用rpm包搭建lamp环境及论坛的创建
- salt-ssh的使用(不需要安装客户端)
- 114. 二叉树展开为链表 golang
- 洛谷P5733、P5734、P5735、P5739题题解(Java语言描述)
- windbg命令集合
- oracle 设置 shmmax,安装ORACLE时在Linux上设置内核参数的含义
- 知识蒸馏在推荐精排中的应用与实践
- 360度动态漫游技术(html格式)
- git clone提示鉴权失败
- 清除计算机垃圾cmd命令,cmd清理缓存命令(cmd命令清除垃圾)
- Tensorflow-GPU使用时笔记本电脑声音过大的问题
- Android文字实现跑马灯效果——两种方法实现
- 作者承认抄袭!导师道歉!香港科技大学展开调查
- 帆软(FineReport)报表学习——一个简单的报表
- [雪浪小镇启动仪式]阿里王坚:没有制造业的互联网没有未来?
- 如何使用阿里云虚拟主机搭建网站?
- PPG_Projector第一种方法:FindA
热门文章
- 信管家源代码c语言,用队列实现按层次创建二叉树的源代码,最好是C语言
- AUTOSAR从入门到精通100讲(三)-基于UDS服务的BootLoader架构和刷写流程
- 产品认知:产品经理需要具备哪些核心竞争力?
- 干货:B端产品经理,快速成长的密码
- 知道接口地址 如何传数据_如何选显示器连接线?四种主流接口要知道
- jQuery 事件 - ready() 方法
- 如何使用window.btoa base64对接口数组进行加密处理
- 分屏显示_2021元旦高性价比显示器推荐——便携式显示器选购指南(分屏办公、小尺寸办公必备)...
- 正确判断js数据类型 总结记录
- DIV CSS布局-固定页面开度布局