计算应用正常运行时间 - android

calculate app uptime - android

我正在尝试获取列表中每个已安装应用程序的耗电量详细信息。但是由于我 没有根访问权限 ,我知道我将无法使用 adb shell 命令来获取所有进程的电池使用信息。

我想我能做的是获取每个安装的应用程序的 正常运行时间 ,获取我的电池断开连接的总时间(通过在 ACTION_POWER_DISCONNECTED 发生时保存时间戳), 并计算 -

( app_runtime * 100 ) / total_time_battery_disconnected

但是,我无法获取有关应用程序的最基本信息 -> 它已经使用了多长时间 运行?我可以在 RunningServices 上使用 activeSince,但这不是这里的解决方案。

classApplicationInfo也没有提供任何这样的方法。

有什么办法可以得到这个细节吗? 我看到很多英国媒体报道应用程序显示了我安装的每个应用程序的总消耗量 运行 since 时间也显示了,所以我知道这是可能的。但是如何?

我调查了 this article 关于 Android 电池寿命的问题。但这仅限于 Android 内部。

甚至尝试过 UsageStats,但它不起作用,在查询使用情况统计列表时返回零。

UsageStatsManager 应该可以满足您的要求。不确定为什么它不起作用,也许您的清单中需要这个?

<uses-permission
      android:name="android.permission.PACKAGE_USAGE_STATS"
      tools:ignore="ProtectedPermissions" />

这是一个记录 UsageStats 的示例

long startTime = new GregorianCalendar(2016, 0, 1).getTimeInMillis();
long endTime = new GregorianCalendar(2017, 0, 1).getTimeInMillis();

UsageStatsManager usageStatsManager = (UsageStatsManager)context.getSystemService(Context.USAGE_STATS_SERVICE);
List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, startTime, endTime);

for (UsageStats us : queryUsageStats) {
    Log.d(TAG, us.getPackageName() + " = " + us.getTotalTimeInForeground());
}

此页面有 an example that walks you through the process of getting the persmission from the user. Lastly, here a full sample on GitHub.

之前 API 21 - SDK 不提供获取应用程序使用统计信息的机制。唯一的方法是将 ActivityManager using the getRunningTasks or getRecentTasks functions. I'll direct you to CommonsWare's response 轮询到类似的问题。