我正在开发一款使用闹钟定期执行某项操作的应用。手机完成启动后会设置闹钟。接收警报并启动服务的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);
}
在实际测试中,我可以确认当电池电量降至15%时,BroadcastReceiver
“LocationAlarmReceiver”被禁用,并且在手机连接到AC / USB后,当电池电量达到时,它会再次启用涨到了30%。
但现在我遇到了以下情况:
我只能猜测Intent.ACTION_BATTERY_OKAY
意图从未传递过。
这种观察是否正确?如何确保再次启用“LocationAlarmReceiver”?
答案 0 :(得分:1)
如果您未在Intent.ACTION_BATTERY_OKAY
接听电话,则应在ACTION_BOOT_COMPLETED
接听电话时启用接收器,检查接收器是否已禁用,然后启用接收器。