【发布时间】:2015-10-30 00:20:48
【问题描述】:
如何在 Android 中以编程方式打开/关闭“请勿打扰”(dnd)?是希望这会给我一些东西,但它没有:
Settings.System.putInt(getContentResolver(), Settings.System.DO_NOT_DISTURB, 1);
【问题讨论】:
标签: android
如何在 Android 中以编程方式打开/关闭“请勿打扰”(dnd)?是希望这会给我一些东西,但它没有:
Settings.System.putInt(getContentResolver(), Settings.System.DO_NOT_DISTURB, 1);
【问题讨论】:
标签: android
我找到了这个解决方案:
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);
需要:
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
据我所知,在执行 requestPermissions() 时不会弹出请求对话框。它必须通过设置菜单设置 -> 声音和通知 -> 请勿打扰访问来授予。
这是在 SDK 23 Marshmallow 上。
【讨论】:
setInterruptionFilter 用于棒棒糖通知优先级过滤器。请改用setNotificationPolicy。
只是改进了 Jordan Parsons 的答案。 要设置优先级,您需要一个只能通过询问用户打开 Activity 才能获得的权限。 将提示一个活动,询问您是否要为您的应用程序启用“请勿打扰”权限。
这个Activity可以这样打开:
NotificationManager mNotificationManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
// Check if the notification policy access has been granted for the app.
if (!mNotificationManager.isNotificationPolicyAccessGranted()) {
Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
startActivity(intent);
}
授予此权限后,可以更改此设置。
【讨论】:
对于那些在 LG G4 上苦苦挣扎的人,有一个解决方法。
LG 没有设置授予的设置选项
permission.ACCESS_NOTIFICATION_POLICY
因此它在接收时崩溃
ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS
但是,LG 确实设置了授予选项
permission.BIND_NOTIFICATION_LISTENER_SERVICE
一旦这个权限被授予,那么
permission.ACCESS_NOTIFICATION_POLICY
(至少在 LG G4 上)。此选项位于设置->常规->安全->通知访问下。为了让用户能够授予此权限,您的应用需要请求它。这是通过声明您的服务来完成的,假设您有一个用于您的应用的服务,如下清单所示:
<service android:name="myService"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
【讨论】: