如何在Android中以编程方式打开/关闭"请勿打扰"(dnd)?是希望这会给我一些东西,但它没有:
Settings.System.putInt(getContentResolver(), Settings.System.DO_NOT_DISTURB, 1);
Run Code Online (Sandbox Code Playgroud) 我正在创建一个教育应用程序,学校的学生可以出现5分钟的快速考试.大多数时候他们使用父母的手机.
现在我想要的是,当学生参加考试时,任何其他应用程序(如WhatsApp,FB或Gmail)都不会发出任何通知.
这可能吗?怎么样?
我希望我的应用程序在手机设置为“请勿打扰”模式(仅警报,仅优先级或完全静音)时显示通知。通过android.media.RINGER_MODE_CHANGED在快速设置中检查此模式并在已选择的选项卡中选择该模式时,可以很好地工作。但是当选择另一个标签时,它不会再次被触发。因此我的应用程序具有错误的模式信息并显示错误的通知。
我再次尝试,android.app.action.INTERRUPTION_FILTER_CHANGED但在上述情况下根本没有触发。
我想立即得到通知,所以我不想使用轮询观察器。就我而言,我希望由此而消耗大量电池。
有一个类似的问题,但没有侦听器解决方案:
希望在此期间我想再次提出一个解决方案:有人有什么好主意或提示要听什么吗?
更新:
这是AndroidManifest.xml中的广播接收器定义...要明确这一点:接收器在振铃模式更改时被调用,还检测到飞行模式和摘机,但是并非在所有振铃模式更改时都被调用。通过按快速设置或使用音量键在免打扰模式更改之间切换:
<receiver android:name="UpdateStatusNotification" android:process=":remote">
<intent-filter>
<action android:name="android.app.action.INTERRUPTION_FILTER_CHANGED"/>
<action android:name="android.intent.action.AIRPLANE_MODE"/>
<action android:name="android.intent.action.PHONE_STATE"/>
<action android:name="android.media.RINGER_MODE_CHANGED"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
更新2:
请阅读我对已接受答案的最后评论。