gpt4 book ai didi

android - 如何使用 UsageStatsManager?

转载 作者:IT王子 更新时间:2023-10-28 23:42:22 30 4
gpt4 key购买 nike

背景

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

我什至写了一篇关于它的帖子 here on StackOverflow ,但我注意到这是不可能的。

问题

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

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

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

declaring the permission implies intention to use the API and the user of the device can grant permission through the Settings application.

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

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

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

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

最佳答案

我认为文档只是日历内容的简写。我认为它实际上不适用于 2014 年。但是我可能是错的。

为了访问 UsageStats 的实际列表,您需要创建一个具有正确月、日和年的 Calendar 对象。 MRK 在另一个答案中是怎么说的。我复制并更正了 MRK 代码中的错误,以便将来看到它的任何人都可以看到。

Calendar beginCal = Calendar.getInstance();
beginCal.set(Calendar.DATE, 1);
beginCal.set(Calendar.MONTH, 0);
beginCal.set(Calendar.YEAR, 2012);

Calendar endCal = Calendar.getInstance();
endCal.set(Calendar.DATE, 1);
endCal.set(Calendar.MONTH, 0);
endCal.set(Calendar.YEAR, 2014);

final List<UsageStats> queryUsageStats=usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY, beginCal.getTimeInMillis(), endCal.getTimeInMillis());

-信用 MRK;由我纠正(他不小心把 cal 而不是 beginCal 和 endCal)

使用权限设置的代码如下。 :)

Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);

关于android - 如何使用 UsageStatsManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26431795/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com