背景
Google 已弃用getRecentTasks
“ActivityManager”类的“”功能。现在它所做的就是获取当前应用程序已打开的应用程序列表。
我什至在 StackOverflow 上写过一篇关于它的文章,但我注意到这是不可能的。
问题
我已经发表了一篇关于它的帖子(这里和另一个由其他人创建的类似的帖子,这里)并要求重新考虑它,谷歌决定创建一个新类,它似乎提供了类似的功能(更像统计,但也可能有用),但我不知道如何使用它。
该类被称为“ UsageStatsManager
”,我的猜测是函数“ queryUsageStats
”完成了这项工作。
此外,它似乎有一个新权限(“ android.permission.PACKAGE_USAGE_STATS
”),这是一个系统权限,但它写的是:
声明权限意味着使用 API 的意图,并且设备的用户可以通过设置应用程序授予权限。
这是有关此新功能的另一个链接。
我发现了什么
我查看了 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
?
另外,您如何让用户以最简单的方式授予权限?还是在应用程序尝试获取所需信息时自动完成?
尝试使用此类但用户尚未确认时会发生什么?
如何让代码返回给我一个真实的应用列表?