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

Android如何以编程方式打开请勿打扰(dnd),android,Android,如何在Android中以编程方式打开/关闭“请勿打扰”(dnd)?我希望这能给我一些东西,但事实并非如此: Settings.System.putInt(getContentResolver(), Settings.System.DO_NOT_DISTURB, 1); 我找到了这个解决方案: NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION

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

Settings.System.putInt(getContentResolver(), Settings.System.DO_NOT_DISTURB, 1);
我找到了这个解决方案:

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE);
它要求:

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

据我所知,在执行requestPermissions()时不会弹出请求对话框。必须通过设置菜单设置->声音和通知->请勿打扰访问来授予该权限


这是SDK23棉花糖上的内容。

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

此活动可以通过以下方式打开:

 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>


setInterruptionFilter
用于棒棒糖通知优先级过滤器。改用
setNotificationPolicy
。它还会隐藏提示通知吗?还是仅仅是声音和振动?你会如何在棒棒糖和更低版本上阻止它们?@JasonHu这两种方法都需要Android API 23和更高版本,即Android M。这需要我弹出一个通知?@androiddeveloper看起来很遗憾,它没有隐藏正面通知。这似乎会导致LG手机崩溃(在process com.Android.settings中)。有人知道如何解决吗?我有一个运行安卓7.1.1的LG Nexus 5x,它可以工作。谢谢LG Nexus 5x是LG唯一的硬件产品。它有纯安卓系统,所以可以工作。问题出在LG G4和使用Android 6.0.1的LG Flex 2上(至少,这两款手机我都没有)。顺便说一句:我们正在LG开发者论坛上讨论这个问题:如果你在这个问题上遇到困难,请加入讨论。回答得好。但是你可能应该编辑Jordan的答案,而不是创建另一个答案。嗨,我需要向某个活动请求此权限。我该怎么做呢?那么我们应该从myService使用意向操作\通知\策略\访问\设置启动活动吗?你能再解释一下吗。