我构建了一个播放音频的应用程序,该应用程序在播放期间不得中断,因为它向其他设备提供时间码信息,并且当设备在其间播放不同的内容(例如电话)时,该应用程序将无法正常工作。
所以我需要一个在播放音频时静音通知的解决方案。 到目前为止我发现:
之前设置权限并引导用户允许应用开启免打扰时
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/