问题标签 [usagestatsmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
60583 浏览

android - 如何使用 UsageStatsManager?

背景

Google 已弃用getRecentTasks“ActivityManager”类的“”功能。现在它所做的就是获取当前应用程序已打开的应用程序列表。

我什至在 StackOverflow 上写过一篇关于它的文章,但我注意到这是不可能的。

问题

我已经发表了一篇关于它的帖子(这里和另一个由其他人创建的类似的帖子,这里)并要求重新考虑它,谷歌决定创建一个新类,它似乎提供了类似的功能(更像统计,但也可能有用),但我不知道如何使用它。

该类被称为“ UsageStatsManager”,我的猜测是函数“ queryUsageStats”完成了这项工作。

此外,它似乎有一个新权限(“ android.permission.PACKAGE_USAGE_STATS”),这是一个系统权限,但它写的是:

声明权限意味着使用 API 的意图,并且设备的用户可以通过设置应用程序授予权限。

这是有关此新功能的另一个链接。

我发现了什么

我查看了 Android 的代码,并注意到“上下文”有 USAGE_STATS_SERVICE ,在 JavaDocs 中说下一件事:

奇怪的是,它不仅说“ status bar”,而且 packageName 也不匹配(应该是“ android.app.usage.UsageStatsManager”)。

我还添加了正确的权限:

这是我使用的代码:

在模拟器本身中,我去了 " Settings"->"security"->"apps with usage access" ,并启用了我的应用程序。

但是,在运行代码时,我得到的只是一个空列表......

问题

你怎么用UsageStatsManager

另外,您如何让用户以最简单的方式授予权限?还是在应用程序尝试获取所需信息时自动完成?

尝试使用此类但用户尚未确认时会发生什么?

如何让代码返回给我一个真实的应用列表?

0 投票
4 回答
29430 浏览

android - 如何检查是否授予“android.permission.PACKAGE_USAGE_STATS”权限?

背景

我正在尝试获取应用程序启动的统计信息,并且在 Lollipop 上可以通过使用UsageStatsManager类,例如(原始帖子在这里):

显现:

打开将让用户确认授予您此权限的活动:

获取统计信息,汇总:

问题

我似乎无法检查是否授予了您需要的权限(“android.permission.PACKAGE_USAGE_STATS”)。到目前为止,我所做的一切总是返回它被拒绝。

代码有效,但权限检查效果不佳。

我试过的

您可以使用以下任一方法检查授予的权限:

或这个:

两者总是返回它被拒绝(即使我已授予用户权限)。

查看 UsageStatsManager 的代码,我试图想出这个解决方法:

它有效,但它仍然是一种解决方法。

问题

为什么我没有得到正确的权限检查结果?

应该怎么做才能更好地检查它?

0 投票
2 回答
5381 浏览

android - Android UsageStatsManager 产生错误的输出?

我正在使用此链接生成应用程序使用状态。我对所选间隔的理解是,对于间隔,它为每个包之间的每个包和持续时间YEARLY聚合数据。同样,它应该适用于和间隔。YEARbeginTimeendTimeWEEKLYDAILY

使用WEEKLY,我的代码和输出如下所示;

代码:

输出:

但是,如果我使用INTERVAL.DAILY上面的代码,我只会得到前三行。我的间隔足够大,它应该包含此间隔之间所有包的所有数据。

我是不是做错了什么,或者我对聚合间隔的理解不正确?任何帮助,将不胜感激。谢谢。

编辑1

在查看 statsfile android 存储在 /data/system/usagestats 文件夹后,我发现了两个用于每日统计的文件和一个用于每周统计的文件,如下所示。

每日档案1

每日档案2

每周

整个数据似乎一团糟。对于同一个浏览器应用,每天存储不同的结果,每周存储不同。

0 投票
2 回答
2694 浏览

android - queryUsageStats 间隔持续时间

我正在使用 UsageStatsManager API 来获取特定时间间隔的使用统计信息。如果我使用预定义的时间间隔(即 INTERVAL_DAILY、INTERVAL_WEEKLY、INTERVAL_MONTHLY、INTERVAL_YEARLY),一切正常。但是,如果我想查看过去 2 或 3 小时的数据,我会得到今天一整天的数据。我曾尝试使用 Calendars 和 System.currentTimeMillis() 但这并没有给我过滤结果。

日历方法:

并将其传递给 queryUsageStats 方法,如下所示:

其中间隔是 INTERVAL_BEST。

System.currentTimeMillis() 方法:

像上面一样将它传递给 queryUsageStats :

其中间隔再次是 INTERVAL_BEST。

我想知道是否有可能获取此持续时间(即不到一天)的数据,因为 INTERVAL_BEST 尚未正确记录以包含此信息。任何帮助将不胜感激,因为我被困在这个问题上。

0 投票
0 回答
548 浏览

android - 显示最近的应用程序列表 - getRecentTasks、AccessibilityService 或 UsageStatsManager

我应该更喜欢什么方法?我希望我的解决方案可以在 android 4.2 以上版本上运行,也可以在 L 和 M 上运行。

  • getRecentTasks - 不再适用于 android L...

  • AccessibilityService - 我自己监控活动的应用程序,因此我可以始终显示最近的应用程序列表,而无需查询任何 android 资源。

  • UsageStatsManager - 我每次需要信息时都会查询经理,这样我就可以显示最近的应用程序

问题

  • 哪种方法比另一种更好?特别是关于能源消耗?我不希望我的应用程序消耗更多的电量...
  • 有谁知道替代解决方案?甚至更好的?

目前我决定使用AccessibilityService,正如我所读的那样,UsageStatsManager如果我查询很长一段时间并且我的应用程序总是会查询总的运行时间段,那么它可能会很慢......

0 投票
2 回答
1963 浏览

android - 如何在 API 22 中获取正在运行的应用程序列表

ActivityManager.getRunningAppProcesses 将仅返回自 5.1.1 以来的当前应用程序:构建 LMY48L。应用程序需要具有 REAL_GET_TASK 权限才能访问所有应用程序的进程信息。REAL_GET_TASK 仅在 SYSTEM 应用程序中使用。GET_TASK 权限已被弃用。

有人告诉我使用 UsageStatsManager,但 PACKAGE_USAGE_STATS 权限需要 API 23(在https://developer.android.com/reference/android/Manifest.permission.html中说)

并且 UsageStatsManager 是获取正在运行的应用程序的奇怪方式,有没有常见的方法来返回正在运行的应用程序列表?

0 投票
1 回答
147 浏览

java - How to use UsageStatsManager on Android Wear

I am trying to use UsageStatsManager on an Android Wear device.

What I did:

I am requesting the permission for it on the mobile app that is running on my phone. After the permission was given by the user, I can access the usage stats data. Then I created a UsageStatsManager on the wear app and tried to access the usage stats data there. However, on the watch, I do not have the permission to do that and I can not ask for permission. To check if the permission was given by the user I used:

This returns true on the phone but false on the watch.

The problem:

I can ask the user for permission to use UsageStatsManager on the phone but I can not do that on the watch because the setting does not exist. Has anyone figured out if it is possible to get UsageStatsManager running on a watch?

0 投票
1 回答
4547 浏览

android - android.permission.PACKAGE_USAGE_STATS 是否仅适用于系统应用?

我通过以下方式访问用户统计信息:

似乎适用于:

但我不确定它是否会继续在更新的 SDK 上工作?我在使用此权限时看到了一些警告,但这些警告并不具体。所以我想知道这些限制到底是什么?

并且

0 投票
3 回答
33339 浏览

android - 如何以编程方式获取在 Android 应用程序上花费的时间

我想获取我今天使用的所有应用程序的使用时间。

当我通过拨号获取这些详细信息时*#*#4636#*#*。但我想在 android 中以编程方式获取这些细节。请帮我解决这个问题。

我们可以看到这些 Play 商店应用程序如何显示使用统计信息

挣脱

应用使用情况

0 投票
3 回答
4434 浏览

android - 尝试检索前台应用程序时出现 Android 6.0 Marshmallow UsageStatsManager 问题

每当我尝试查询 UsageStatsManager 的使用情况统计时,我都可以正确获取最后运行的应用程序。但是,如果我拉下状态栏并且有新通知,则上次使用的应用程序(基于 UsageStats)将更改为通知的应用程序。结果,我收到前台应用程序已更改的错误警报。

我似乎找不到过滤这些特定抽奖的方法。有任何想法吗?

现在,我使用以下代码查询前台应用程序。该问题仅存在于 Marshmallow 中(5.X 正常工作)。