【问题标题】:How to determine time since last charge如何确定自上次充电以来的时间
【发布时间】:2013-08-27 13:22:01
【问题描述】:

如何以编程方式确定我上次为手机充电的时间?我正在寻找的是在名为 time 的 TextView 中向我展示的内容:

上次充电时间:3 小时前

当然如果是充电将是

上次充电时间:0 小时前

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

【问题讨论】:

  • 恕我直言,您最好的选择是使用 Batter Manager。它会获取有关充电状态的更新(因此,当您将手机插入充电时,它就会知道)。然后,当你开始放电时,你就可以开始计时了。不确定这是否是最好的方法,但这是我想到的第一件事。您可能需要注册一个服务来收听电池充电广播(不确定它们是否具有粘性)。文档:developer.android.com/reference/android/os/BatteryManager.html
  • 我使用电池管理器来计算有关电池的一些信息(如电量、温度以及是否正在充电)。所以我已经使用这个广播了..但是我不知道如何注册ACTION_POWER_DISCONNECTED/ACTION_POWER_CONNECTED的两个时刻并计算时间。

标签: android battery batterylevel


【解决方案1】:

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

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

ACTION_POWER_DISCONNECTED/ACTION_POWER_CONNECTED

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

【讨论】:

  • 是的,但我该怎么做呢?我正在考虑这个解决方案,但我不知道如何使用它。实际上,在我的 textview 应用程序中,我会显示手机是否正在充电,所以我已经有一个广播可以做到这一点。但是我如何“注册”我插入手机和拔掉手机的那一刻?然后我必须计算经过的时间..你有任何编程解决方案吗?还是一个例子?
  • 我没有可用的代码示例,但您可以这样做: 1. 为上述操作注册广播接收器。 2. 一旦你收到连接的广播,保存那个时间戳,它可能不精确到秒,但我很确定精度不会超过几秒钟。然后在任何时间点,您都需要更新您的 TextView 以计算自连接充电器以来经过的时间。
【解决方案2】:

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. 获取电池状态行,其中包括上次充电器断开连接以来的毫秒数
  2. 使用 awk 去除该时间并将其转换为秒
  3. 从当前时间中减去它以获得以秒为单位的间隔
  4. 使用 awk 对其进行格式化

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2011-02-16
    相关资源
    最近更新 更多