Android:为应用程序音频流以外的所有通知设置“请勿打扰”(setInterruptionFilter)

时间:2018-09-03 09:31:56

标签: android settings android-notifications notificationmanager

我已经构建了一个播放音频的应用程序,该音频在播放过程中不得中断,因为它向其他设备提供了时间码信息,并且在设备之间播放不同的内容(例如电话)时将无法正常工作。

因此,我需要一种在播放音频时使通知静音的解决方案。 我到目前为止发现了:

  • 以前设置权限并指导用户允许应用使用以下功能打开DND时

    startActivityForResult(new 
    Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS), 0);
    

    我可以通过以下方式激活“请勿打扰”(DND)模式:

    NotificationManager.setInterruptionFilter(
        NotificationManager.INTERRUPTION_FILTER_NONE)
    

    但是,这也会使我的应用的音频流也静音。 (请参阅1

  • 仅当用户具有root用户访问权限时才可以阻止电话。我可以询问我的用户,并且它也不会静音其他通知

  • 我不能使用飞行模式,因为该应用需要WiFi才能通过Internet通过NTP查询时间。

可能的解决方案是手动设置DND模式,然后启动应用程序和流。但是如何将用户直接发送到DND菜单,以便他/她可以启用DND模式并通过按返回按钮返回到应用程序? 我只找到“设置操作”:

    ACTION_NOTIFICATION_LISTENER_SETTINGS
    ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS
    ACTION_SOUND_SETTINGS

不是正确的屏幕。也许可以通过某种方式打开DND模式的快速设置?

因此,为了简化起见,我需要做的事情:

用户启动音频->询问用户是否要激活dnd以免中断音频播放-> 音频播放开始-> 用户停止音频->禁用DND

提前感谢您的想法!

2 个答案:

答案 0 :(得分:1)

您基本上是通过INTERRUPTION_FILTER_NONE禁用所有声音。使用INTERRUPTION_FILTER_PRIORITY并配置通知策略以允许媒体播放,如下所示:

NotificationManager.setInterruptionFilter(
   NotificationManager.INTERRUPTION_FILTER_PRIORITY );
NotificationManager.setNotificationPolicy(
   new NotificationManager.Policy( NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA,
      0, 0 ) );

您还可以通过向setNotificationPolicy添加其他参数来抑制诸如灯光之类的效果-有关详细信息,请参见Android帮助。

答案 1 :(得分:0)

在Kotlin中,这可以按以下方式完成。

 notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY)
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                    val policy =
                        NotificationManager.Policy(Policy.PRIORITY_CATEGORY_MEDIA, 0, 0)
                    notificationManager.notificationPolicy = policy
                }

注意:由于政策PRIORITY_CATEGORY_MEDIA已添加到该API中,因此只有在Android API级别28和更高版本中才有可能。

在其他情况下,还有其他一些策略类别可能会有所帮助。喜欢 PRIORITY_CATEGORY_REMINDERS, PRIORITY_CATEGORY_EVENTS, PRIORITY_CATEGORY_MESSAGES, PRIORITY_CATEGORY_CALLS, PRIORITY_CATEGORY_REPEAT_CALLERS等。在这里NotificationManager.Policy Official doc

了解更多有关它们的信息