【问题标题】:Disable/enable BroadcastReceiver when battery low/okay电池电量不足/正常时禁用/启用广播接收器
【发布时间】: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%。

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

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

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

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

【问题讨论】:

    标签: android broadcastreceiver battery


    【解决方案1】:

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

    【讨论】:

    • 我想到了,所以感谢您的确认,但我想这可能意味着当电池电量(仍然)低时启用BroadcastReceiver
    • 那么您应该在启用接收器之前检查电池电量,如果电池电量高于 15%,那么您可以启用它....
    • 是的,这里是关于如何做到这一点的信息:link
    • 其实这并不能解决问题:在上述情况下,如果我在ACTION_BOOT_COMPLETED上检查电池电量,它仍然是低电量并且接收器将保持禁用状态。
    • 为此,您可以实现一个计时器,该计时器将在一段时间后检查电池电量,如果不正常,您可以再次设置计时器..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多