我已经构建了一个播放音频的应用程序,该音频在播放过程中不得中断,因为它向其他设备提供了时间码信息,并且在设备之间播放不同的内容(例如电话)时将无法正常工作。
因此,我需要一种在播放音频时使通知静音的解决方案。 我到目前为止发现了:
以前设置权限并指导用户允许应用使用以下功能打开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
提前感谢您的想法!
答案 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
了解更多有关它们的信息