0

我正在开发一个使用警报定期做某事的应用程序。当手机完成启动时设置警报。当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% 时它会再次启用。

但是现在我遇到了以下情况:

  1. 电池电量下降到 15%,“LocationAlarmReceiver”被禁用
  2. 手机最终会因为电池耗尽而自行关闭
  3. 手机已连接到 AC/USB
  4. 手机开机开机,继续充电,电量达到100%
  5. “LocationAlarmReceiver”仍处于禁用状态

我只能猜测Intent.ACTION_BATTERY_OKAY意图从未交付。

这个观察正确吗?如何确保“LocationAlarmReceiver”再次启用?

4

1 回答 1

1

如果您没有接听电话,Intent.ACTION_BATTERY_OKAY那么您应该在接听电话时启用接收器,ACTION_BOOT_COMPLETED检查您的接收器是否被禁用,那么您应该启用它。

于 2011-09-05T09:54:00.573 回答