2011-09-05 86 views
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”被禁用:当电池变低时,BroadcastReceiver接到报警,并启动服务被禁用和启用时电池又是好的到15%,手机连接到AC/USB后,当电池电量上升到30%时,它再次启用。

但现在我有以下情形:

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

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

这个观察是否正确?我怎样才能确保“LocationAlarmReceiver”被再次启用?

回答

1

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

+0

我想过这么多谢谢确认,但我想这可能意味着'BroadcastReceiver'在电池电量(仍然)低时启用? –

+0

然后你应该在启用接收器之前检查电池电量,如果电池电量高于15%,那么你可以启用它...... –

+0

是的,这里是如何做到这一点的信息:[链接](http:// stackoverflow问题:3661464/get-battery-level-before-broadcast-receiver-responds-for-intent-action-battery-ch) –

相关问题