【发布时间】:2016-10-03 21:42:22
【问题描述】:
我希望我的应用程序在手机设置为免打扰模式(仅警报、仅优先级或完全静音)时显示通知。在快速设置中检查此模式并在已选择的选项卡中选择模式时,通过收听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:
请阅读我对已接受答案的最后评论。
【问题讨论】:
-
使用您的活动来检查模式更改并将其传播到您的选项卡片段?如果您想像您提到的那样节省电池,也可以尝试使用广播接收器,看来您已经在使用广播进行此操作了?
-
是的,我有一个广播接收器,它通过检查流音量来更新通知。它确实会正确更新通知,if 调用。但并非在所有情况下都调用它,尤其是在快速设置中切换不同模式时。该应用程序主要在后台休眠,只有警报管理器才会激活以定期响铃。因此,大多数时候我没有积极的活动。
-
在这种情况下您不需要警报管理器,配置文件的更改应该触发所有必要的广播接收器,请发布您如何实现它的代码。如果一切正常,为什么您没有收到通知似乎很奇怪
-
你是对的,警报管理器与检测模式变化无关。我只是提到它来解释为什么我的应用程序主要在后台。我已将广播接收器定义添加到问题中。
标签: android