【发布时间】:2013-12-09 04:25:03
【问题描述】:
我正在开发一个应用程序,其中,当 Battery_Status_Full 发生(电池已充电 100%)/充电断开时,我需要更新数据库中的时间,以先发生者为准。
我能够获取电池断开事件并根据该事件更新数据库,但是当设备仍在充电并达到 100% 电量时,在服务内部时 - onCreate 我已经使用 IntentFilter(Intent. ACTION_BATTERY_CHANGED) 并尝试每隔 5 分钟触发一次重复事件以检查 100% 电池充电是否完成,我似乎从未收到 100% 事件,因此总是发生断开数据库更新而不是 100% 充电更新。 此外,使用我的 AlarmManager,检查 100% 电池充电的服务只触发一次,而不是重复触发。
请指导。我几乎完成了我的应用程序,但是这个小错误让我发疯了。 谢谢 奥姆卡尔·盖萨斯
---- 更多详情 ---- 我的应用架构如下,
BroadcastReceiver(为 ACTION_POWER_CONNECTED 和 ACTION_POWERDISCONNECTED 注册)。在每种情况下,它都会启动一个单独的服务来处理数据库事务。对于连接的电源,它使用称为 ADD 的额外信息设置 Intent,对于断开连接,它使用更新设置它
服务启动时,在其 onCreate 中,它通过为 IntentFilter ACTION_BATTERY_CHANGED 传入 null 广播接收器来注册接收器 在 onStartCommand 中,对于 Intent 中的添加标志,将一个新条目保存在 db 中。 在更新标志的情况下-仅当未进行较早的更新数据库条目时,我才继续更新数据库
我在上述添加/更新逻辑 (If-Else) 下面有一个带有 setRepeating 的 AlarmManager,它通过 getService(serviceclass.class) 启动另一个服务
我希望在新服务中,当我不断检查电池电量是否达到 100% 时,我会自行更新数据库。
如果电池从未达到 100% 并且 Battery_Dicsonnected 被触发,那么在上面的更新块内,无论当时的电池电量如何,数据库都会得到更新。
怀疑/担忧 -
- 但问题是,从警报管理器调用的新服务仅启动/调用一次。
- 我应该把这个警报管理器放在第一个服务的什么位置?
- 是否需要为不断检查电池电量是否达到 100% 而创建第二项服务?
请指导。如果需要,我可以很好地发布代码。 谢谢 奥姆卡尔
【问题讨论】:
-
也许电池永远不会达到充满状态并且充电器决定在此之前停止充电(例如在 99% 时)。您可以在收到
ACTION_BATTERY_CHANGED时检查电池电量,并在电量为 99% 时将电池充满电。对于重复事件,请查看:developer.android.com/reference/android/app/AlarmManager.html -
我现在在我的原始查询中添加了更多详细信息。可能这将有助于理解基本问题是什么。我敢肯定,作为一个新手,我一定在某个地方搞砸了,但我不确定在哪里:)
-
"通过传入空broadcastreceiver"表示没有接收器可以接收ACTION_BATTERY_CHANGED?
-
不是我的意思.. context.getApplicationContext().registerReceiver(this,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
-
@omkar.ghaisas 你是如何解决问题的?即使我的电池电量为 100%,我的 BatteryManager.BATTERY_STATUS_FULL 总是返回 false
标签: android broadcastreceiver android-service alarmmanager