Android:为除应用程序音频流之外的所有通知设置 "do not disturb"(setInterruptionFilter)

标签 android settings android-notifications notificationmanager

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

所以我需要一个在播放音频时静音通知的解决方案。 到目前为止我发现:

  • 之前设置权限并引导用户允许应用开启免打扰时

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

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

    NotificationManager.setInterruptionFilter(
        NotificationManager.INTERRUPTION_FILTER_NONE)
    

    但是这也会使我的应用程序的音频流静音。 (参见1)

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

  • 使用飞行模式,因为该应用需要 WiFi 才能通过 NTP 从互联网查询时间。

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

    ACTION_NOTIFICATION_LISTENER_SETTINGS
    ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS
    ACTION_SOUND_SETTINGS

这不是合适的屏幕。也许以某种方式提供了打开免打扰模式的快速设置?

为了缩短它,我需要做什么:

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

预先感谢您对此的想法!

最佳答案

您基本上使用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 帮助。

关于Android:为除应用程序音频流之外的所有通知设置 "do not disturb"(setInterruptionFilter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52146942/

相关文章:

java.lang.RuntimeException : Unable to start activity ComponentInfo Android Eclipse 错误

android - 如何知道我的应用程序是在前台还是后台,android?

c# - 在 Settings.setting 文件中添加新设置

java - Android 通知永远不会显示

android - 如何控制通知组点击

用于登录文件的 Android 最佳记录器

android - 从错误的线程异常调用

google-chrome - 禁用 Google Chrome 中的快捷方式

c# - 程序集特定设置未在运行时加载

android - NavDeepLinkBuilder 没有重定向到目标 fragment