我希望我的应用程序在手机设置为“请勿打扰”模式时显示通知(仅限警报,仅限优先级或完全静音)。在快速设置中检查此模式并在已选择的选项卡中选择模式时,通过收听android.media.RINGER_MODE_CHANGED
可以很好地工作。但是当选择另一个标签时,它不会被再次触发。所以我的应用程序有错误的模式信息,并显示错误的通知。
我再试一次android.app.action.INTERRUPTION_FILTER_CHANGED
,但在上述情况下,它根本没有被解雇。
因为我想立即获知,我不想使用投票观察员。在我的情况下,我预计会有大量的电池消耗。
有一个类似的问题,但没有听众解决方案:
Android: Detect Do Not Disturb status?
希望在此期间可能有一个解决方案我想再次提出这个问题:有没有人有好主意或暗示要听什么?
更新:
这是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:
请阅读我对收到的答案的最后评论。
答案 0 :(得分:4)
广播接收者的行动是:
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_NON) {
//....
} else if (mNotificationManager.getCurrentInterruptionFilter() == NotificationManager.INTERRUPTION_FILTER_ALL) {
} else if (mNotificationManager.getCurrentInterruptionFilter() == NotificationManager.INTERRUPTION_FILTER_PRIORUTY) {
} else if (mNotificationManager.getCurrentInterruptionFilter() == NotificationManager.INTERRUPTION_FILTER_UNKNOWN) {
}
}