有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在安卓中启用静默模式而不触发请勿打扰

我在这个问题上有点困难

在我的音量控制应用程序中,我正在尝试将系统声音模式设置为“仅静音”,而不触发“请勿打扰”,我的应用程序有权修改DND设置和通知访问,没有任何问题

系统设置有一个静音配置文件,可以关闭DND,但我找不到使用音频管理器的方法

我尝试将模式设置为静默,然后使用NotificationManager更改DND设置,在将系统设置为静默后禁用DND设置振动,禁用DND,然后设置静默重新激活DND

参考代码:

int current = audioManager.getRingerMode();
if (current == AudioManager.RINGER_MODE_VIBRATE) {
         newIcon = Icon.createWithResource(this, R.drawable.silent);
         //ENABLES DND WHEN IT SHOULD ENABLE SILENT
         audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
}

任何帮助都将不胜感激,因为这让我有点疯狂


共 (3) 个答案

  1. # 1 楼答案

    这确实是Android中另一个非常常见的bug,因为设置RINGER_MODE_SILENT并没有实现文档中所说的功能。我通过以下方式获得了想要的行为:

    • 第一个设置RINGER_MODE_NORMAL
    • 然后设置RINGER_MODE_SILENT
    • 然后设置INTERRUPTION_FILTER_ALL以覆盖错误设置的请勿打扰状态

    audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
    notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL);
    

    希望这有帮助

  2. # 2 楼答案

    对于DnD,有两种世界观:安卓N之前和安卓N之后。在安卓N之前,如果你只对铃声感兴趣,你可以使用AudioMamnager.setRingerMode(RINGER_MODE_SILENT)。但是自从安卓N,公共api AudioMaManager。setRingerMode(静默)=DND。因此,要实现完全静音,必须切换DnD

    此外,如果要继续切换DnD,还需要NotificationPolicyAccess

    更新以处理评论

    Android用户有很大的自由度。应用程序没有的纬度

    对于你的情况,有好消息,也有坏消息

    坏消息:

    不幸的是,我无法推荐任何解决方法。沉默==DND是一种长期的、经过CTS测试的行为。 (M->;任何应用程序都可以设置模式_SILENT,并且DND将打开)(N+->;在应用程序中使用模式_silentfirst checks有权更改DND)

    好消息

    首先,感谢分享您的用例。事实证明,谷歌的摄像头应用程序也有录音功能。在录制过程中使用DND。因此,DND应该是适合您情况的可行选择。你应该能够检查这一点(我使用的是像素设备)

    1. 开始录制视频
    2. 在录制过程中,下拉快速设置以查看DND磁贴
  3. # 3 楼答案

    。。。但是DND不是沉默的。DND可以配置为允许优先呼叫者振铃,但静默不允许呼叫者振铃。因此,用户和应用程序应该有选择权

    此代码似乎为我成功地使振铃器静音(在运行API 28的模拟器上),并且未设置请勿打扰模式:-

    audio.adjustStreamVolume(AudioManager.STREAM_RING,
                            AudioManager.ADJUST_MUTE, 0);
    

    要恢复振铃器,请执行以下操作:

    enter audio.adjustStreamVolume(AudioManager.STREAM_RING,
                            AudioManager.ADJUST_UNMUTE, 0);