我的问题与此类似: 电池接收器充满电不工作 。这个问题没有答案。
以下是我到目前为止想到的方法:
方法 1:在 AndroidManifest.xml 中为 ACTION_BATTERY_CHANGED 注册一个 BroadcastReceiver。
由于以下原因,这将不起作用:
我无法在 中注册 BroadcastReceiver 以AndroidManifest.xml
进行侦听,ACTION_BATTERY_CHANGED
因为它是此处所述的粘性 Intent:https ://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED 。
方法 2:在 MainActivity.java 的onCreate()
方法中以编程方式注册一个 BroadcastReceiver。
这种方法的问题是:避免在 Android 中注册重复的广播接收器
除了上述问题外,我还没有正确理解广播接收器的范围。更准确地说,我不明白当应用程序注册时,应用程序注册的广播接收器会发生什么情况:
1) 被安卓系统调用它的onDestroy()
方法销毁
2) 当应用程序被用户通过应用程序管理器设置强制停止时。
有人可以解释一下吗?
方法 3:使用使用 SharedPreferences 和 BroadcastReceiver 来监听设备重启的变通方法。
如果我之前为 ACTION_BATTERY_CHANGED 注册了广播接收器,有一个共同的偏好让我知道。如果是,不要创建一个新的,否则,为 ACTION_BATTERY_CHANGED 创建一个新的广播接收器。正如方法 2 中的链接所指出的,SharedPreference 中的值在设备重新启动时变得无效,因此有一个单独的广播接收器在重新启动时再次创建接收器并更新共享首选项以反映相同。
虽然,方法 3 可能有效,但我觉得这是一种繁琐的方法。有没有更简单的方法?
此外,我的应用程序效率低下,因为它会在电池状态的每次变化时运行。有没有办法让它运行,只有当电池充满时,这是我的主要目的?