【问题标题】:Android how to turn on do not disturb (dnd) programmaticallyAndroid如何以编程方式打开请勿打扰(dnd)
【发布时间】:2015-10-30 00:20:48
【问题描述】:

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

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

【问题讨论】:

    标签: android


    【解决方案1】:

    我找到了这个解决方案:

    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
    • 它还会隐藏提醒通知吗?还是只是声音和振动?您将如何在 Lollipop 及以下网站上阻止他们?
    • @JasonHu 两种方法都需要 Android API 23 及更高版本,即 Android M 。
    • 这需要我弹出通知吗?
    • @androiddeveloper 很遗憾它似乎没有隐藏提醒通知
    【解决方案2】:

    只是改进了 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 手机崩溃(正在处理 com.android.settings)。有人知道如何解决吗?
    • 我有一台运行 android 7.1.1 的 LG Nexus 5x,这很有效。谢谢!
    • LG Nexus 5x 只是硬件方面的 LG。它具有纯Android,因此可以正常工作。问题出在 LG G4 和搭载 Android 6.0.1 的 LG Flex 2 上(至少,我没有这两款手机)。
    • 顺便说一句:我们正在 LG 开发者论坛上讨论这个问题:mobile.developer.lge.com/support/forums/general/… 如果您遇到这个问题,请加入讨论。
    • 好答案。但您可能应该编辑 Jordan 的答案,而不是创建另一个答案。
    【解决方案3】:

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

    【讨论】:

    • 您好,我需要向 Activity 请求此权限。我该怎么做?
    • 那么我们是否应该从 myService 以意图 ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS 开始活动?你能解释一下吗?
    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    相关资源
    最近更新 更多