Android N:在更新复选框首选项之前检查免打扰状态已更改
Android N: checking for DND state changed before updating checkbox preference
我的应用程序将铃声模式设置为静音,但使用 Android N 我得到 java.lang.SecurityException: Not allowed to change Do Not Disturb state
.
我按照此 中的步骤进行操作,以下代码将打开一个 activity,其中包含一个切换按钮,用于启用更改铃声模式的权限。这个activity可以是"backed"从没有启用权限。
Intent intent = new Intent(
android.provider.Settings
.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
startActivity(intent);
问题是我想确保在尝试使用静音铃声模式功能之前已授予权限。
我正在添加一个 CheckBoxPreference 来启用和禁用此铃声模式切换。因此,如果复选框被选中,我可以将铃声模式设置为静音,如果没有,我将不会更改铃声模式。
到目前为止,当用户单击复选框时,我设法启动了此权限请求:
disableSoundCheckboxPreference.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
...
// check for Android N and start the activity mentioned above
但是只有在授予权限的情况下才启用此复选框的正确方法是什么?我猜它应该与 ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED
和一个监听器有关,但我需要一些想法来实现它。
谢谢!
我设法解决了这个问题,并将 post 提供答案以备不时之需。
在这种情况下不需要 BroadcastListener。当用户第一次点击带有 OnPreferenceClickListener
:
的首选项时,您只需要请求权限
private void requestNotificationPolicyAccess() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && !isNotificationPolicyAccessGranted()) {
Intent intent = new Intent(android.provider.Settings.
ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
startActivity(intent);
如果用户授予权限,当他再次点击时,你将允许用户改变CheckBox
的状态。如果未授予权限,您将继续用 "false" 更新 CheckBox
并且可能会在 android:summary
中写入必须首先授予权限。您可以通过以下方式验证:
private boolean isNotificationPolicyAccessGranted() {
NotificationManager notificationManager = (NotificationManager)
getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
return notificationManager.isNotificationPolicyAccessGranted();
}
我的应用程序将铃声模式设置为静音,但使用 Android N 我得到 java.lang.SecurityException: Not allowed to change Do Not Disturb state
.
我按照此
Intent intent = new Intent(
android.provider.Settings
.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
startActivity(intent);
问题是我想确保在尝试使用静音铃声模式功能之前已授予权限。
我正在添加一个 CheckBoxPreference 来启用和禁用此铃声模式切换。因此,如果复选框被选中,我可以将铃声模式设置为静音,如果没有,我将不会更改铃声模式。
到目前为止,当用户单击复选框时,我设法启动了此权限请求:
disableSoundCheckboxPreference.setOnPreferenceChangeListener(
new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
...
// check for Android N and start the activity mentioned above
但是只有在授予权限的情况下才启用此复选框的正确方法是什么?我猜它应该与 ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED
和一个监听器有关,但我需要一些想法来实现它。
谢谢!
我设法解决了这个问题,并将 post 提供答案以备不时之需。
在这种情况下不需要 BroadcastListener。当用户第一次点击带有 OnPreferenceClickListener
:
private void requestNotificationPolicyAccess() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && !isNotificationPolicyAccessGranted()) {
Intent intent = new Intent(android.provider.Settings.
ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
startActivity(intent);
如果用户授予权限,当他再次点击时,你将允许用户改变CheckBox
的状态。如果未授予权限,您将继续用 "false" 更新 CheckBox
并且可能会在 android:summary
中写入必须首先授予权限。您可以通过以下方式验证:
private boolean isNotificationPolicyAccessGranted() {
NotificationManager notificationManager = (NotificationManager)
getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
return notificationManager.isNotificationPolicyAccessGranted();
}