在Android中检测请勿打扰模式更改的内容是什么?

时间:2016-06-03 18:06:32

标签: android

我希望我的应用程序在手机设置为“请勿打扰”模式时显示通知(仅限警报,仅限优先级或完全静音)。在快速设置中检查此模式并在已选择的选项卡中选择模式时,通过收听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:

请阅读我对收到的答案的最后评论。

1 个答案:

答案 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) {

}

}