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 (勿扰模式)设置流程相关推荐

  1. android 勿扰模式代码,android 勿扰模式代码结构简析

    勿扰模式是Android 7.0开始加入的功能.它的核心思想是屏蔽了通知的铃声.振动和展示. 代码分散在几部分. 1.设置代码在Settings中,ZenMode开头的一系列文件 /packages/ ...

  2. android 勿扰模式代码,android Lollipop勿扰模式

    android的L新版本中增加了"打扰"的新功能,相信很多同学搞不明白.找了一篇介绍勿扰模式很好的文章,可惜是英文的,现翻译如下,相信读完此问,你会理解android对勿扰模式的设 ...

  3. opengl android 纹理贴图 代码,Android 使用opengl es的纹理贴图白屏问题请教。

    各位大侠好: 我在使用open gl es的做显示的时候,发现一个问题,请各位帮助一下,谢谢. 环境:opengl es 1.x,2D的模式显示纹理图片. 在LG-P990,HTC-C510E上显示附 ...

  4. android 图片变颜色代码,Android -对图片Drawable进行变色

    Android 图片DrawableCompat利用setTint()对图片Drawable进行变色 1.利用color资源对Drawable变色 Drawable对象的来源不限制,可以是从资源get ...

  5. Android微信通讯录界面代码,Android中使用Expandablelistview实现微信通讯录界面

    之前的博文<Android 中使用ExpandableListView 实现分组的实例>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的 ...

  6. android下拉框代码,Android下拉列表spinner的实例代码

    spinner组件有点类型于HTML中的下拉框的样子,让用户每次从下拉框中选取一个,本文为大家分享了Android下拉列表spinner的具体实现代码,供大家参考,具体内容如下 mian.xml xm ...

  7. android实时监控屏幕代码,Android 屏幕切换监听的实例代码

    昨天,我试着在屏幕切换时,使View显示在不同的位置,在网上搜索了一些资料,自己做了一段时间,终于完成了功能. 由于屏幕切换会调用activity的各个生命周期,所以需要在manifest的activ ...

  8. Android运行ListView的代码,Android ListView组件详解及示例代码

    Android 列表组件 ListView 列表组件是开发中经常用到组件,使用该组件在使用时需要为它提供适配器,由适配器提供来确定显示样式和显示数据. 下面看一个例子: 新建一个项目Lesson8_L ...

  9. android 多闹钟实现代码,Android编程实现闹钟的方法详解

    Android编程实现闹钟的方法详解 发布时间:2020-09-30 10:18:02 来源:脚本之家 阅读:75 作者:Jacob-wj 本文实例讲述了Android编程实现闹钟的方法.分享给大家供 ...

最新文章

  1. 目标反射回波检测算法及其FPGA实现 之一:算法概述
  2. LA4234 Binary Clock(进制转换)
  3. 【PC工具】更新文件夹多文件群体比较工具WinMerge
  4. 利用rpm包搭建lamp环境及论坛的创建
  5. salt-ssh的使用(不需要安装客户端)
  6. 114. 二叉树展开为链表 golang
  7. 洛谷P5733、P5734、P5735、P5739题题解(Java语言描述)
  8. windbg命令集合
  9. oracle 设置 shmmax,安装ORACLE时在Linux上设置内核参数的含义
  10. 知识蒸馏在推荐精排中的应用与实践
  11. 360度动态漫游技术(html格式)
  12. git clone提示鉴权失败
  13. 清除计算机垃圾cmd命令,cmd清理缓存命令(cmd命令清除垃圾)
  14. Tensorflow-GPU使用时笔记本电脑声音过大的问题
  15. Android文字实现跑马灯效果——两种方法实现
  16. 作者承认抄袭!导师道歉!香港科技大学展开调查
  17. 帆软(FineReport)报表学习——一个简单的报表
  18. [雪浪小镇启动仪式]阿里王坚:没有制造业的互联网没有未来?
  19. 如何使用阿里云虚拟主机搭建网站?
  20. PPG_Projector第一种方法:FindA

热门文章

  1. 信管家源代码c语言,用队列实现按层次创建二叉树的源代码,最好是C语言
  2. AUTOSAR从入门到精通100讲(三)-基于UDS服务的BootLoader架构和刷写流程
  3. 产品认知:产品经理需要具备哪些核心竞争力?
  4. 干货:B端产品经理,快速成长的密码
  5. 知道接口地址 如何传数据_如何选显示器连接线?四种主流接口要知道
  6. jQuery 事件 - ready() 方法
  7. 如何使用window.btoa base64对接口数组进行加密处理
  8. 分屏显示_2021元旦高性价比显示器推荐——便携式显示器选购指南(分屏办公、小尺寸办公必备)...
  9. 正确判断js数据类型 总结记录
  10. DIV CSS布局-固定页面开度布局