如何以编程方式确定上次我为手机充电的时间?我正在寻找的是一个名为time
的TextView中的东西:
上次充电:3小时前
当然,如果充电将是
上次充电:0小时前
或类似的东西。我想我必须注册一个AlarmManager,但我不确定。我只是想再创造这个估计。怎么办?
答案 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}'
解释一下:
如果您关心任何费用而不是上次完全充电,请查看batterystats --checkin
“bt”行中的第6列 - 自上次从充电器断开连接以来的毫秒数。这也适用于早期版本的Android ,而batteryinfo
代替batterystats
。
如果充电器当前连接,这些值不会反映出来,所以你应该听听Gaurav Arora对此所描述的意图。