Wie wird UsageStatsManager verwendet?
Google hat die Funktion "getRecentTasks
"der" ActivityManager "-Klasse. Jetzt müssen Sie nur noch die Liste der Apps abrufen, die die aktuelle App geöffnet hat.
Ich habe sogar einen Beitrag darüber geschriebenhier auf StackOverflow, aber mir ist aufgefallen, dass es unmöglich ist.
Das ProbleIch habe einen Beitrag darüber gemacht Hie und ein anderes, ähnliches, das von jemand anderem erstellt wurde,Hie) und bat darum, es zu überdenken, und Google beschloss, eine neue Klasse zu erstellen, die eine ähnliche Funktionalität zu bieten scheint (eher wie Statistiken, aber möglicherweise auch nützlich), aber ich kann nicht herausfinden, wie man sie verwendet.
Die Klasse heißt "UsageStatsManager
", und ich vermute, dass die Funktion"queryUsageStats
" macht den Job
Auch scheint es, es hat eine neue Berechtigung ("android.permission.PACKAGE_USAGE_STATS
"), die einSystemberechtigung, aber es steht geschrieben:
Das Angeben der Berechtigung impliziert die Absicht, die API zu verwenden, und der Benutzer des Geräts kann die Berechtigung über die Anwendung "Einstellungen" erteilen.
Hier ist ein weiterer Link zu dieser neuen Funktionalität.
Was ich gefunden habeIch habe mir den Code von Android angeschaut und festgestellt, dass "Context" USAGE_STATS_SERVICE hat, was in den JavaDocs das Nächste sagt:
/**
* 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";
Die seltsame Sache ist, dass nicht nur "status bar
", aber auch der Paketname stimmt nicht überein (sollte"android.app.usage.UsageStatsManager
" stattdessen)
Ich habe auch die richtige Berechtigung hinzugefügt:
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
und hier ist der Code, den ich benutze:
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);
m Emulator selbst ging ich zu "Settings"->"security"->"apps with usage access
"und aktivierte meine App.
Beim Ausführen des Codes erhalte ich jedoch nur eine leere Liste ...
Die FragWie benutzt duUsageStatsManager
?
Auch, wie kann der Benutzer die Berechtigung auf einfachste Weise erteilen? Oder wird es automatisch gemacht, sobald die App versucht, die benötigten Informationen zu erhalten?
Was passiert, wenn versucht wird, diese Klasse zu verwenden, der Benutzer dies jedoch noch nicht bestätigt hat?
Wie kann ich veranlassen, dass der Code mir eine echte Liste von Apps zurückgibt?