背景
谷歌已废弃了 "ActivityManager" 类的 "getRecentTasks
" 函数。现在它所做的只是获取当前应用程序打开的应用程序列表。
我甚至在 StackOverflow 上写了一篇文章(这里),但我注意到这是不可能的。
问题
我发表了一篇关于此问题的帖子 (这里),还有另外一个问题类似的帖子被其他人创建 (这里),请求重新考虑该功能是否可以提供,谷歌决定创建一个新类,看起来提供了类似的功能 (更像统计数据,但也可能有用),但我找不到如何使用它。
这个类被称为 "UsageStatsManager
",我的猜测是函数 "queryUsageStats
" 执行该任务。
此外,它似乎有一个新的权限 ("android.permission.PACKAGE_USAGE_STATS
"),这是一个系统权限,但其中写到:
声明权限意味着使用API的意图,设备用户可以通过设置应用程序授予权限。
这里还有关于这个新功能的链接。
我的发现
我查看了 Android 的代码,并注意到 "Context" 有 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";
奇怪的是它不仅显示“状态栏
”,而且包名不匹配(应该是“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);
在模拟器中,我进入"设置"-"安全"-"允许使用的应用
",并启用了我的应用程序。
然而,当运行代码时,我得到的只是一个空列表...
问题
如何使用UsageStatsManager
?
另外,如何以最简单的方式让用户授予权限?或者当应用程序尝试获取所需信息时,是否会自动完成?
如果用户还没有确认,尝试使用此类会发生什么?
如何使代码返回一个真实的应用程序列表?
/data/system/usagestats/{user_id_}
,其中{user_id}
是设备上用户帐户的 ID。 - TheRealChx101