通过BroadcastReceiver接收ACTION_BATTERY_CHANGED后知道BatteryManager.Battery_Status_Full

时间:2012-03-09 10:35:33

标签: android broadcastreceiver android-service alarmmanager

我正在开发一个应用程序,其中,当Battery_Status_Full发生时(电池充电100%)/充电断开时,我需要更新db中的时间,以先发生者为准。

我能够获得电池断开事件并根据该事件更新数据库,但是当设备仍在充电并且达到100%充电时,当在服务内部时 - onCreate我已经使用IntentFilter注册了broadcastReceiver(意图。 ACTION_BATTERY_CHANGED)并尝试在每5分钟说一次重复事件后检查100%电池充电是否完成,我似乎从未收到100%事件,因此始终发生断开连接数据更新,而不是100%充电更新。 另外,使用我的AlarmManager,检查100%电池充电的服务只会被触发一次而不是重复。

请指导。我几乎完成了我的应用程序,但这个小错误让我发疯。 谢谢 Omkar Ghaisas

----更多细节---- 我的应用程序架构如下,

  1. BroadcastReceiver(已注册为ACTION_POWER_CONNECTED和ACTION_POWERDISCONNECTED)。在每种情况下,它都会启动一个单独的服务来处理数据库事务。对于已连接的POwer,它将Intent设置为名为ADD的额外信息,对于已断开连接,它将使用Update

  2. 进行设置。
  3. 当服务启动时,在其onCreate中,它通过为IntentFilter传递null broadcastreceiver ACTION_BATTERY_CHANGED来注册接收者 在onStartCommand中,对于intent中的Add标记,新的条目保存在db中。 在更新标志的情况下 - 仅当没有进行更新的db更新时,我继续更新数据库

  4. 我在上面的添加/更新逻辑(If-Else)下面有一个带有setRepeating的AlarmManager,它通过getService(serviceclass.class)启动另一个服务

  5. 我期待在新服务中,当我继续检查battry级别是否达到100%时,我自己更新数据库。

  6. 如果电池永远不会达到100%并且触发了Battery_Dicsonnected,那么在上面的更新模块中,数据库无论如何都会更新,无论当时的电池电量是多少。

  7. 怀疑/担忧 -

    • 但问题是,从alarmmanager调用的新服务只启动/调用一次。
    • 我在哪里将此报警管理器完全置于第一个服务中?
    • 是否创建了第二项服务,以便不断检查电池电量是否达到100%所需?

    请指导。如果需要,我可以很好地发布代码。 谢谢 OMKAR

1 个答案:

答案 0 :(得分:-1)

我终于明白了。我对闹钟管理员的定位是错误的。我修复了这个问题并删除了不必要的第二项服务,以检查是否达到了100%的电池电量。最后,每个人都按预期工作。 :-)哇我觉得我的第一个Android应用程序按预期工作非常过分。 谢谢你的帮助。 OMKAR