免打扰功能的入口在NotificationSettings中,

点击列表项跳转到ZenModeSettings。java

android:title="@string/zen_mode_settings_title"

settings:keywords="@string/keywords_sounds_and_notifications_interruptions"

android:fragment="com.android.settings.notification.ZenModeSettings" />

ZenModeSettings 继承了ZenModeSettingsBase,

ZenModeSettingsBase的子类还有ZenModeAutomationSettings,ZenModePrioritySettings,ZenModeRuleSettingsBase

其中ZenModeRuleSettingsBase是一个抽象类,它的子类有ZenModeEventRuleSettings,ZenModeExternalRuleSettings,ZenModeScheduleRuleSettings。android

ZenModeSettings 只是显示ZenModePrioritySettings和ZenModeAutomationSettings的入口web

android:title="@string/zen_mode_priority_settings_title"

android:fragment="com.android.settings.notification.ZenModePrioritySettings" />

android:title="@string/zen_mode_automation_settings_title"

android:fragment="com.android.settings.notification.ZenModeAutomationSettings" />

ZenModePrioritySettings负责自定义免打扰规则

能够对提醒、活动、消息、通话、重复来电者的免打扰规则进行设置。ide

对提醒的免打扰规则设置,调用NotificationManager的方法设置通知svg

public boolean setZenModeConfig(ZenModeConfig config, String reason) {

checkCallerIsSystem();

return mZenModeHelper.setConfig(config, reason);

}

mReminders.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

@Override

public boolean onPreferenceChange(Preference preference, Object newValue) {

if (mDisableListeners) return true;

final boolean val = (Boolean) newValue;

MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ALLOW_REMINDERS, val);

if (val == mConfig.allowReminders) return true;

if (DEBUG) Log.d(TAG, "onPrefChange allowReminders=" + val);

final ZenModeConfig newConfig = mConfig.copy();

newConfig.allowReminders = val;

return setZenModeConfig(newConfig);

}

});

protected boolean setZenModeConfig(ZenModeConfig config) {

final String reason = getClass().getSimpleName();

final boolean success = NotificationManager.from(mContext).setZenModeConfig(config, reason);

if (success) {

mConfig = config;

if (DEBUG) Log.d(TAG, "Saved mConfig=" + mConfig);

onZenModeConfigChanged();

}

return success;

}

其余内容的通知设置均调用NotificationManager的setZenModeConfig方法进行设置spa

ZenModeAutomationSettings负责显示已有的通知规则和添加自定义通知规则

通知规则包括时间规则(经过ZenModeScheduleRuleSettings进行设置)和事件规则(经过ZenModeEventRuleSettings进行设置)。

通知规则的内容有规则名称、日期、开始和结束事件、免打扰规则code

事件通知规则和时间通知均继承自ZenModeRuleSettingsBase

开关控制的实如今这个父类中,切换开关仍然调用NotificationManager的setZenModeConfig(ZenModeConfig config, String reason)方法xml

@Override

public void onSwitchChanged(Switch switchView, boolean isChecked) {

if (DEBUG) Log.d(TAG, "onSwitchChanged " + isChecked);

if (mDisableListeners) return;

final boolean enabled = isChecked;

if (enabled == mRule.enabled) return;

MetricsLogger.action(mContext, MetricsLogger.ACTION_ZEN_ENABLE_RULE, enabled);

if (DEBUG) Log.d(TAG, "onSwitchChanged enabled=" + enabled);

mRule.enabled = enabled;

mRule.snoozing = false;

setZenModeConfig(mConfig);

if (enabled) {

final int toastText = getEnabledToastText();

if (toastText != 0) {

mEnabledToast = Toast.makeText(mContext, toastText, Toast.LENGTH_SHORT);

mEnabledToast.show();

}

} else {

if (mEnabledToast != null) {

mEnabledToast.cancel();

}

}

}

android 打开免打扰模式,Android 6.0设置模块免打扰功能浅析相关推荐

  1. android 免打扰模式吗,OPPOReno怎么设置免打扰模式?

    常常在我们生活中可能在特定时间或者休息时间不喜欢被打扰,比如来电.信息等...这时候就可以开启免打扰模式,下面我们就来看看详细的教程. 1.免打扰可以设置自动开启或者手动开启,手动开启可通过桌面设置- ...

  2. Android打开相机,报出 android.os.FileUriExposedException: file:///storage/emulated/0/test/img.jpg exposed

    执行以下代码后,打开相机 //调用相机自带的照相功能 指定图片目录 if (Environment.getExternalStorageState().endsWith(Environment.MED ...

  3. android 打开相册的权限,Android 启动系统相机,相册,裁剪图片及6.0权限管理

    在日常开发中,我们经常需要用到上传图片的 功能,这个时候通常有两种做法,第一种,从相机获取,第二种,从相册获取.今天这篇博客主要讲解利用系统的Intent怎样获取? 主要内容如下 怎样通过相机获取我们 ...

  4. android打开本地音乐播放器,Android8.0打开手机所有的音乐播放器

    上篇文章录取的电话音频,这是用来读取播放方法 //path 文件路径 public void play(String path) { Intent intent = new Intent(Intent ...

  5. android 自动开启调试模式,android user版本默认开启调试模式

    由于项目需要,需要发布版本默认开启调试模式,修改方式如下: 1.开启开发者模式 context.getSharedPreferences(DevelopmentSettings.PREF_FILE,C ...

  6. android 8.1 夜间模式,android 快速实现夜间模式

    最近项目中遇到了一个问题,夜间模式在8.0以上的手机中不起作用,查看了一下原因,是夜间模式实现方法的问题.分两种情况介绍一下 先看一下运行效果: 第一种 是目前项目中用到的,是以前的开发人员写的,存在 ...

  7. android 打开闪光灯,如何在Android中以编程方式打开前置闪光灯...

    对于这个问题,你应该: >检查手电筒是否是 可用与否? >如果是,则关闭/打开 >如果没有,那么根据你的应用,你可以做任何事情 需要. 要检查设备中闪存的可用性: 您可以使用以下内容 ...

  8. android app英文 英文模式,Android APP 中英文切换

    实习期间,师父要求做app的中英文切换,就顺便记录了下. 一.AndroidManifest.xml文件(清单文件) 在每个要切换语言的Activity下面添加: android:configChan ...

  9. android如何做夜间模式,Android实现日夜间模式的三种常用方法(一)

    1.使用 setTheme的方法让 Activity重新设置主题: 2.设置 Android Support Library中的 UiMode来支持日间/夜间模式的切换: 3.通过资源 id 映射,回 ...

最新文章

  1. smartcrop.js智能图片裁剪库
  2. 《极乐空间》特效制作与渲染
  3. Google App Engine技术架构之Google App Engine的简介
  4. tar目录的-P参数
  5. C++ Primer 第10章 习题 10.18
  6. java set 取第一个_set集合取第一个元素的几种方法
  7. djl和ljl_使用Spring Boot和DJL进行深度学习
  8. Python解析access数据库(mdb文件或者accdb文件)
  9. 常见Linux发行版本(转载)
  10. mysql字段描述_详细的MySQL字段类型描述
  11. 五年技术工作的一点点感悟
  12. 三种坐标系经纬度转化小工具
  13. win10计算机管理员的权限才能删除,Win10文件夹删除不了需要管理员权限怎么办?Win10文件夹删除不了需要管理员权限的解决方法...
  14. 想要快速增肌?肌酸可以帮你高效获得肌肉和力量
  15. 学习笔记 | 通用能力提升
  16. 怎么样可以在阿里云搭建个人网站及域名绑定介绍
  17. 概率论与数理统计浙江大学笔记和课后答案
  18. 舵机常见问题原理分析及解决办法
  19. mysql数据库引擎(show engines)
  20. VehicleDynamicsAndCoontrol(四) -LONGITUDINAL VEHICLE DYNAMICS

热门文章

  1. Ubuntu搭建嵌入式开发(交叉编译)环境-转
  2. mysql中索引创建 查看和删除语句_MySQL索引的创建、删除和查看(学习中)
  3. [Python] L1-047 装睡-PAT团体程序设计天梯赛GPLT
  4. 蓝桥杯 ADV-80 算法提高 选最大数
  5. Spring 学习系列 -- Spring + Mybatis 从零开始配置多数据源访问
  6. P2604 [ZJOI2010]网络扩容
  7. 聊聊高并发(二十九)解析java.util.concurrent各个组件(十一) 再看看ReentrantReadWriteLock可重入读-写锁...
  8. “OpAfrica”行动:匿名者攻击南非武器采购机构
  9. SharePoint列表下拉框优化
  10. 第三次冲刺--软件工程