【问题标题】:Get the remaining battery time available from an Android phone获取 Android 手机可用的剩余电池时间
【发布时间】:2012-02-13 23:04:03
【问题描述】:

是否可以从 Android 手机获取剩余电池时间?

谢谢。

【问题讨论】:

  • 剩余时间”是什么意思?
  • 获取 Android 手机电池的剩余可用时间
  • 你的意思是电池充电剩余时间吗?请把问题说清楚,不要发布任何问题来接收这种类型的cmets,如果你这样做,你会失望投票,最后你可能会失去提出更多问题的机会。
  • 您可以从developer.android.com/reference/android/os/… 获取当前电池电量,但您需要找到一种方法来根据一些标准估算“剩余时间”
  • @Sodino 你是如何解决你的问题的?

标签: android power-management


【解决方案1】:

有一些应用程序(电池小部件等)可以估计电池耗尽前的剩余时间。我猜他们会采用当前的电池电量并尝试根据处理器使用情况、背光级别等计算出电流消耗。根据我的经验,它们并不太准确,但原则上,如果你的算法正确,它应该是可能的。

【讨论】:

    【解决方案2】:

    您可以通过为动作Intent.ACTION_BATTERY_CHANGED注册接收器来借助广播接收器获得电池寿命。我的答案只是关键,从 Android 开发者网站获取信息。

    通过在 BroadcastReceiver 的 onReceive() 方法中使用以下语句和上述 Intent 操作,您将获得当前可用的电池电量(例如,50%、60% 等)。但是您无法估计剩余时间,因为某些应用程序可能会消耗更多电量。所以我认为电池电量到剩余时间的转换不会给出正确的结果。

    battery_level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      知道了!您可以从dumpsys 获取信息,但它需要 ROOT 权限。我可以使用以下命令执行命令并获取输出:

      fun execRoot(command: String): Pair<String, Boolean> {
          return try {
              val process = Runtime.getRuntime().exec(
                  arrayOf(
                      "su",
                      "-c",
                      "cd / && $command"
                  )
              )
              val reader = BufferedReader(InputStreamReader(process.inputStream))
              var line: String?
              var final = ""
              while (reader.readLine().also { line = it } != null) {
                  final = "$final$line\n"
              }
              return Pair(final, true)
          } catch (e: IOException) {
              Pair("", false)
          }
      }
      

      通过这个函数,我可以捕获来自dumpsys 的输出。 您可以通过此行获取有关剩余时间的信息:

      var line = execRoot("dumpsys batterystats | grep -E \"Battery time remaining\"").first
      

      它将返回 Battery time remaining: 1h 55m 41s 682ms, 如果有 0% - Battery time remaining: 0ms,如果手机正在充电,它不会返回任何内容

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多