Como usar o UsageStatsManager?
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 problemaEu 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 encontreiAnalisei 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ãoComo 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?