Como usar o UsageStatsManager?

fundo

O Google descontinuou a função "getRecentTasks"da classe" ActivityManager ". Agora, basta obter a lista de aplicativos que o aplicativo atual abriu.

Eu até escrevi um post sobre issoaqui no StackOverflow, mas notei que é impossível.

O problema

Eu fiz um post sobre isso (aqui, e outro semelhante, criado por outra pessoa,aqui) e solicitou sua reconsideração, e o Google decidiu criar uma nova classe, que parece fornecer uma funcionalidade semelhante (mais parecida com estatística, mas também pode ser útil), mas não consigo descobrir como usá-la.

A classe é chamada "UsageStatsManager", e meu palpite é que a função"queryUsageStats"faz o trabalho.

Além disso, parece que ele tem uma nova permissão ("android.permission.PACKAGE_USAGE_STATS"), que é umpermissão do sistema, mas está escrito que:

declarar a permissão implica intenção de usar a API e o usuário do dispositivo pode conceder permissão por meio do aplicativo Configurações.

Aqui está outro link sobre essa nova funcionalidade.

O que eu encontrei

Analisei o código do Android e notei que "Context" possui USAGE_STATS_SERVICE, que no JavaDocs diz a próxima coisa:

/**
 * 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";

O estranho é que não apenas diz "status bar", mas também o packageName não corresponde (deve ser"android.app.usage.UsageStatsManager" em vez de) .

Também adicionei a permissão correta:

<uses-permission
    android:name="android.permission.PACKAGE_USAGE_STATS"
    tools:ignore="ProtectedPermissions" />

e aqui está o código que eu uso:

  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);

No próprio emulador, fui para "Settings"->"security"->"apps with usage access"e ativou meu aplicativo.

No entanto, ao executar o código, tudo o que recebo é uma lista vazia ...

A questão

Como você usaUsageStatsManager ?

Além disso, como você permite que o usuário conceda a permissão da maneira mais fácil possível? Ou é feito automaticamente assim que o aplicativo tenta obter as informações necessárias?

O que acontece ao tentar usar essa classe e o usuário ainda não a confirmou?

Como posso fazer com que o código me devolva uma lista real de aplicativos?