1

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

上次充电时间:3 小时前

当然如果正在充电

上次充电时间:0h 前

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

4

2 回答 2

1

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

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

ACTION_POWER_DISCONNECTED/ACTION_POWER_CONNECTED

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

于 2013-08-27T13:27:00.787 回答
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. 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}'

解释一下:

  1. 获取包含上次充电器断开连接的毫秒时间的电池状态行
  2. 使用 awk 去除该时间并将其转换为秒
  3. 从当前时间中减去它以获得以秒为单位的间隔
  4. 使用 awk 格式化

如果您关心任何充电而不是最后一次完全充电,请查看“bt”行中的第 6 列batterystats --checkin- 这是自上次与充电器断开连接以来的毫秒数。这也适用于早期版本的 Androidbatteryinfo而不是batterystats.


这些值不反映充电器当前是否已连接,因此您应该听听 Gaurav Arora 对此的回答所描述的意图。

于 2015-06-26T14:33:30.113 回答