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

本文介绍了Android设备上的免打扰功能(Zen Mode)的详细配置过程,包括其入口位置、不同设置页面的功能如ZenModePrioritySettings、ZenModeAutomationSettings,以及如何通过设置管理提醒、通知规则,使用NotificationManager API进行操作。重点展示了自定义规则、时间规则和事件规则的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

免打扰功能的入口在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();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值