300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > android 打开免打扰模式 Android 6.0设置模块免打扰功能浅析

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

时间:2019-05-19 18:42:29

相关推荐

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

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

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。