我希望我的应用程序在手机设置为请勿打扰模式(仅限闹钟、仅限优先级或完全静音)时显示通知。通过聆听,这效果非常好android.media.RINGER_MODE_CHANGED
在快速设置中检查此模式并在已选择的选项卡中选择模式时。但是,当选择另一个选项卡时,它不会再次触发。所以我的应用程序有错误的模式信息并显示错误的通知。
我又尝试了一次android.app.action.INTERRUPTION_FILTER_CHANGED
但在上述情况下它根本没有被解雇。
因为我想立即得到通知,所以我不想使用投票观察员。就我而言,我预计会因此消耗大量电池。
有一个类似的问题,但没有侦听器解决方案:
Android:检测请勿打扰状态? https://stackoverflow.com/questions/31387137/android-detect-do-not-disturb-status
希望同时有一个解决方案,我想再次问这个问题:有人有好主意或提示要听什么吗?
UPDATE:
这是 AndroidManifest.xml 中的广播接收器定义...要明确这一点:在响铃模式更改时调用接收器,也会检测飞行模式和摘机,但不会在所有响铃模式更改时调用接收器,尤其是通过快速设置中的 Tab 键或音量键在请勿打扰模式更改之间切换:
<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>
更新2:
请阅读我对已接受答案的最后评论。
广播接收器的操作是:
NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED
IntentFilter intent = new IntentFilter();
intent.addAction(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED);
下面的代码应该在接收器中。
if(intetn.getAction().equals(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED) {
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if(mNotificationManager.getCurrentInterruptionFilter() == NotificationManager.INTERRUPTION_FILTER_ALARMS) {
//do your stuff
} else if (mNotificationManager.getCurrentInterruptionFilter() == NotificationManager.INTERRUPTION_FILTER_NONE) {
//....
} else if (mNotificationManager.getCurrentInterruptionFilter() == NotificationManager.INTERRUPTION_FILTER_ALL) {
//....
} else if (mNotificationManager.getCurrentInterruptionFilter() == NotificationManager.INTERRUPTION_FILTER_PRIORITY) {
//....
} else if (mNotificationManager.getCurrentInterruptionFilter() == NotificationManager.INTERRUPTION_FILTER_UNKNOWN) {
//....
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)