【发布时间】:2014-12-13 10:29:22
【问题描述】:
背景
Google 已弃用“ActivityManager”类的函数“getRecentTasks”。现在它所做的就是获取当前应用已打开的应用列表。
我什至写了一篇关于它的帖子here on StackOverflow,但我发现这是不可能的。
问题
我已经发了一篇关于它的帖子(here,以及另一个由其他人创建的类似的帖子,here)并要求重新考虑它,Google 决定开设一个新课程,这似乎提供类似的功能(更像是统计信息,但也可能有用),但我不知道如何使用它。
这个类被称为“UsageStatsManager”,我猜是函数“queryUsageStats”完成了这项工作。
此外,它似乎有一个新权限(“android.permission.PACKAGE_USAGE_STATS”),这是一个系统权限,但它是这样写的:
声明权限意味着使用 API 和用户的意图 的设备可以通过设置应用程序授予权限。
Here's 另一个关于此新功能的链接。
我发现了什么
我查看了 Android 的代码,注意到“上下文”有 USAGE_STATS_SERVICE ,在 JavaDocs 中是这样说的:
/**
* Use with {@link #getSystemService} to retrieve a {@link
* android.app.UsageStatsManager} for interacting with the status bar.
*
* @see #getSystemService
* @see android.app.UsageStatsManager
* @hide
*/
public static final String USAGE_STATS_SERVICE = "usagestats";
奇怪的是,它不仅说“status bar”,而且 packageName 也不匹配(应该是“android.app.usage.UsageStatsManager”)。
我还添加了正确的权限:
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
这是我使用的代码:
final UsageStatsManager usageStatsManager=(UsageStatsManager)context.getSystemService("usagestats");// Context.USAGE_STATS_SERVICE);
final int currentYear=Calendar.getInstance().get(Calendar.YEAR);
final List<UsageStats> queryUsageStats=usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,currentYear-2,currentYear);
在模拟器本身中,我去了“Settings"->"security"->"apps with usage access”,并启用了我的应用程序。
但是,在运行代码时,我得到的只是一个空列表...
问题
你如何使用UsageStatsManager ?
另外,您如何让用户以最简单的方式授予权限?还是在应用尝试获取所需信息时自动完成?
尝试使用此类但用户尚未确认时会发生什么?
如何让代码返回一个真实的应用列表?
【问题讨论】:
-
"如何让用户以最简单的方式授予权限?" -- 我在“设置”>“安全”屏幕中看到“具有使用访问权限的应用程序”。据推测,请求此权限的应用程序会出现在那里。恕我直言,他们应该使用
<meta-data>。 -
@CommonsWare 是的,我注意到了这一点,但我作为开发人员提出了这个问题。开发人员应该如何处理它?我什至不知道如何初始化整个事情。这也有点奇怪,它是系统权限,但可以使用它......在不同的情况下有这样的事情吗?也许这将是一个类似的处理......
-
"开发者应该如何处理它?" - 告诉用户去访问那个屏幕,我想。 “另外一个案子有这样的事吗?” -- 我不知道。
-
@CommonsWare 我的意思是,它是如何工作的?我什至如何初始化或到达这个类?它没有 CTOR,也不能通过 Context.getSystemService 获得(至少不在文档和 SDK 中)......另外,当我尝试调用这个函数时会发生什么?它会进入所需的设置屏幕,还是我应该自己做?我需要希望如何使用这个新课程...
-
我的猜测是它应该是通过
getSystemService()并且存在文档错误。至于其他的,我不知道。它的源代码似乎还没有发布。
标签: android usage-statistics activity-manager android-recents usagestatsmanager