Android如何以编程方式打开请勿打扰(dnd)

时间:2015-08-06 18:02:41

标签: android

如何在Android中以编程方式打开/关闭“请勿打扰”(dnd)?是希望这会给我一些东西,但事实并非如此:

Settings.System.putInt(getContentResolver(), Settings.System.DO_NOT_DISTURB, 1);

3 个答案:

答案 0 :(得分:30)

我找到了这个解决方案:

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);

需要:

<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />

据我所知,在执行requestPermissions()时,不会弹出请求对话框。它必须通过设置菜单设置 - &gt;授予。声音&amp;通知 - &gt;请勿打扰访问。

这是在SDK 23 Marshmallow上。

答案 1 :(得分:21)

改善Jordan Parsons的答案。 要设置优先级,您需要一个权限,只有通过要求用户打开活动才能获得该权限。 系统将提示您是否要为您的应用程序启用“请勿打扰”权限。

此活动可以这种方式打开:

Grid1

授予此权限后,可以更改此设置。

答案 2 :(得分:4)

对于那些与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>