我正试图在列表中获取每个已安装应用程序的功耗详细信息。但由于我没有root访问权限,我知道我将无法使用adb
shell命令来获取所有进程的电池使用信息。
我认为我能做的是为每个安装的应用程序获取正常运行时间,获取电池断开连接的总时间(通过在ACTION_POWER_DISCONNECTED
发生时保存时间戳),并计算-
(app_runtime*100)/total_time_batter_disconnected
然而,我无法获得有关应用程序的最基本信息->它运行了多久?我可以在RunningServices上使用activeSine,但这不是这里的解决方案。
类ApplicationInfo
也不提供任何这样的方法。
有什么方法可以得到这个细节吗?我看到很多膨胀软件应用程序显示了我安装的每个应用程序的总消耗量,并且还显示了自时间以来运行的,所以我知道这是可能的。但是怎么做呢?
我看了这篇关于安卓电池寿命的文章。但这仅限于Android内部。
甚至尝试过UsageStats,但不起作用,在查询使用情况统计列表时返回Zero。
<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());
}
这个页面有一个示例,它将引导您完成从用户那里获得任务的过程。最后,这里是GitHub上的完整示例。
在API 21之前-SDK不提供获取应用程序使用统计信息的机制。唯一的方法是使用getRunningTasks或getRecentTasks函数轮询ActivityManager。我将引导您了解CommonsWare对类似问题的回答。