如何确定自上次充电以来的时间

时间:2013-08-27 13:22:02

标签: android battery batterylevel

如何以编程方式确定上次我为手机充电的时间?我正在寻找的是一个名为time的TextView中的东西:

  

上次充电:3小时前

当然,如果充电将是

  

上次充电:0小时前

或类似的东西。我想我必须注册一个AlarmManager,但我不确定。我只是想再创造这个估计。怎么办?

2 个答案:

答案 0 :(得分:1)

我不认为android会立即为最后一次充电时间提供API。

或者,您可以注册广播,例如

ACTION_POWER_DISCONNECTED/ACTION_POWER_CONNECTED

并在充电器断开连接时节省时间并在您的应用中使用。

答案 1 :(得分:0)

Android 5.0 及更高版本上,添加权限:

<uses-permission android:name="android.permission.DUMP" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

然后从您的应用中使用Runtime.exec()执行dumpsys batterystats --checkin --charged。在输出(CSV)中,您会在第4列中找到与bt类似的行:

9,0,l,bt,6,208938,208938,15441248,15441248,1434662557297,0,0

第10列中的数字(在本例中为1434662557297)是设备上次完成完全充电时的时间戳(自纪元以来的毫秒数) - 即你断开了它。从当前日期和时间(从收费以来得到的时间)中减去这一点很容易。

如果您想从adb shell执行此操作,我确实想出了一个有点复杂的命令,您可以保存到脚本以生成1d 2h 3m样式格式:

busybox expr $(date +%s) - $(dumpsys batterystats --checkin | grep "l,bt" | busybox awk -F',' '{printf "%i", $10/1000}') | busybox awk '{printf "%id %ih %im\n", $1/60/60/24, $1/60/60 % 24, $1/60 % 60}'

解释一下:

  1. 获取包含上一次充电器断开连接的毫秒时间的batterystats线
  2. 使用awk删除该时间并将其转换为秒
  3. 从当前时间减去它以获得以秒为单位的间隔
  4. 使用awk格式化
  5. 如果您关心任何费用而不是上次完全充电,请查看batterystats --checkin“bt”行中的第6列 - 自上次从充电器断开连接以来的毫秒数。这也适用于早期版本的Android ,而batteryinfo代替batterystats

    如果充电器当前连接,这些值不会反映出来,所以你应该听听Gaurav Arora对此所描述的意图。