计算app正常运行时间 - android

时间:2017-05-15 10:49:29

标签: android battery usage-statistics

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

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

(app_runtime * 100)/ total_time_battery_disconnected

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

班级ApplicationInfo也没有提供任何此类方法。

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

我查看了Android电池续航时间this article。但这仅限于Android内部。

即使尝试UsageStats,但它无效,在查询使用统计信息列表时返回Zero。

1 个答案:

答案 0 :(得分:0)

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,可引导您完成从用户获取持久性的过程。最后,这里是full sample on GitHub

在API 21之前 - SDK不提供获取应用程序使用情况统计信息的机制。唯一的方法是使用ActivityManagergetRunningTasks函数轮询getRecentTasks。我会引导你CommonsWare's response提出类似的问题。