【发布时间】:2011-09-05 09:42:07
【问题描述】:
我正在开发一个使用闹钟定期执行某项操作的应用。当手机完成启动时设置警报。 BroadcastReceiver 收到警报并启动服务会在电池电量不足时禁用,并在电池再次正常时启用:
@Override
public void onReceive(final Context context, final Intent intent) {
if (intent != null && intent.getAction() != null) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
// Set alarm
} else if (action.equals(Intent.ACTION_BATTERY_LOW)) {
setLocationAlarmReceiverEnabled(context, false);
} else if (action.equals(Intent.ACTION_BATTERY_OKAY)) {
setLocationAlarmReceiverEnabled(context, true);
}
}
}
private void setLocationAlarmReceiverEnabled(final Context context,
final boolean enabled) {
PackageManager packageManager = context.getPackageManager();
ComponentName locationAlarmReceiver = new ComponentName(context,
LocationAlarmReceiver.class);
packageManager.setComponentEnabledSetting(locationAlarmReceiver,
enabled ? PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
在实际测试中,我可以确认BroadcastReceiver"LocationAlarmReceiver" 在电池电量下降到 15% 时被禁用,并且在手机连接到 AC/USB 后,当电池电量上升时它会再次启用到 30%。
但现在我遇到了以下情况:
- 电池电量降至 15%,“LocationAlarmReceiver”被禁用
- 手机最终会因为电池电量耗尽而自行关机
- 手机已连接到 AC/USB
- 手机开机开机,继续充电,电量达到100%
- “LocationAlarmReceiver”仍处于禁用状态
我只能猜测 Intent.ACTION_BATTERY_OKAY 意图从未交付。
这个观察正确吗?如何确保“LocationAlarmReceiver”再次启用?
【问题讨论】:
标签: android broadcastreceiver battery