如何以编程方式确定上次为手机充电的时间?我正在寻找的是在一个名为 TextViewtime
中向我展示的东西:
上次充电时间:3 小时前
当然如果正在充电
上次充电时间:0h 前
或类似的东西。我想我必须注册一个 AlarmManager 但我不确定。我只是想创建这个估计而已。怎么办?
如何以编程方式确定上次为手机充电的时间?我正在寻找的是在一个名为 TextViewtime
中向我展示的东西:
上次充电时间:3 小时前
当然如果正在充电
上次充电时间:0h 前
或类似的东西。我想我必须注册一个 AlarmManager 但我不确定。我只是想创建这个估计而已。怎么办?
我认为 android 不会立即为最后一次充电时间提供 API。
或者,您可以注册广播,例如
ACTION_POWER_DISCONNECTED/ACTION_POWER_CONNECTED
并在充电器断开连接时节省时间并在您的应用程序中使用它。
在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
. bt
在输出 (CSV) 中,您会在第 4 列中找到如下所示的一行:
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}'
解释一下:
如果您关心任何充电而不是最后一次完全充电,请查看“bt”行中的第 6 列batterystats --checkin
- 这是自上次与充电器断开连接以来的毫秒数。这也适用于早期版本的 Android,batteryinfo
而不是batterystats
.
这些值不反映充电器当前是否已连接,因此您应该听听 Gaurav Arora 对此的回答所描述的意图。