在安卓中启用静音模式而不触发“请勿打扰”

2022-09-03 02:59:54

有点麻烦弯曲我的头围绕这个。

在我的音量控制应用程序中,我试图将系统声音配置文件设置为SILENT ONLY而不触发请勿打扰,我的应用程序可以访问修改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);
}

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


答案 1

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

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

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

要恢复铃声,请执行

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

答案 2

这确实是Android中另一个非常熟悉的错误,因为该设置没有做文档所说的应该做的事情。我通过以下方式获得了所需的行为: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);

希望这有帮助。


推荐