【发布时间】:2017-02-27 15:59:40
【问题描述】:
我有一个可以处理多个事件的广播接收器。我需要它在启动时为我做一些特殊的事情,所以我注册了 android.intent.action.BOOT_COMPLETED 意图,它工作正常。如果设备已插入并正在充电,则 android.intent.action.ACTION_POWER_CONNECTED 意图在 BOOT_COMPLETED 之前触发,并且在它应该做的事情之前工作。 (我使用BOOT_COMPLETED 作为一种初始化程序)。
有没有办法检查BOOT_COMPLETED 事件是否已被触发,以便我可以在事件过早触发的情况下运行我的初始化代码?
【问题讨论】:
-
你能在 BOOT_COMPLETE 被触发时设置一个布尔值吗?
-
不,没有办法做到这一点。重构您的代码,使其更加灵活。当您收到第一个广播而不是收到特定广播时初始化内容。考虑改变你的架构,也许使用像
Service这样的组件来以正确的顺序强制初始化。 -
@SteveSmith 当应用程序完全关闭/强制关闭时布尔值将被取消设置,如果我再次启动应用程序将无效。
-
@XaverKapeller 谢谢,这样做的实际目的是在设备重新启动后在某些特殊情况下注销用户。但由于应用程序正在运行非常重要,它正在侦听多个事件并检查它是否处于活动状态。电源事件将启动服务并登录设备,用户将能够从登录中听到音频,这是不希望的,因为他不应该登录。但你可能是对的,我正在接近这个以错误的方式解决问题。
-
你为什么不单独跟踪这两个?通过喜欢使用一些标志来跟踪 Boot 在处理 ACTION_POWER_CONNECTED 之前是否实际完成?或者让它们都触发相同的代码,但如果一个已经在运行,则忽略它,因为它已经处于处理状态。
标签: java android android-intent