我的问题与此类似: battery receiver fully charged doesnt work 。那个问题没有答案。
以下是我到目前为止所考虑的方法:
方法1:在AndroidManifest.xml中为ACTION_BATTERY_CHANGED注册一个BroadcastReceiver。
由于以下原因,这不起作用:
我无法在AndroidManifest.xml
中注册一个BroadcastReceiver来监听ACTION_BATTERY_CHANGED
,因为它是如本文所述的粘性意图:https://developer.android.com/reference/android/content/Intent.html#ACTION_BATTERY_CHANGED。
方法2:在MainActivity.java的onCreate()
方法中以编程方式注册BroadcastReceiver。
这种方法的问题是:Avoid registering duplicate broadcast receivers in Android
除上述问题外,我还不能正确理解广播接收器的范围。更准确地说,我不明白应用程序在以下情况下应用程序注册的广播接收器会发生什么:
1)Android系统通过调用onDestroy()
方法
2)当用户通过“应用程序管理器”设置强制停止应用程序时。
请有人请解释一下吗?
方法3:使用使用SharedPreferences和BroadcastReceiver的解决方案来监听设备重启。
如果我之前已为ACTION_BATTERY_CHANGED注册了广播接收器,请让我知道共享首选项。如果是,请不要创建新的,否则,为ACTION_BATTERY_CHANGED创建一个新的广播接收器。正如方法2中的链接所指出的,SharedPreference中的值在设备重启时变为无效,因此有一个单独的广播接收器在重新启动时再次创建接收器并更新共享首选项以反映相同的内容。
虽然方法3可行,但我觉得这是一种麻烦的方式。有更简单的方法吗?
此外,我的应用程序效率低下,因为它将针对电池状态的每次更改运行。有没有办法让它运行,只有当电池充满时,这是我的主要目的?