¿Cómo usar UsageStatsManager?

Antecedentes

Google ha desaprobado la función "getRecentTasks"de la clase" ActivityManager ". Ahora todo lo que hace es obtener la lista de aplicaciones que la aplicación actual ha abierto.

Incluso he escrito una publicación al respectoaquí en StackOverflowPero noté que es imposible.

El problema

He hecho una publicación al respecto (aquíy otro similar creado por otra persona,aquí) y solicitó volver a considerarlo, y Google decidió crear una nueva clase, que parece proporcionar una funcionalidad similar (más como estadísticas, pero también podría ser útil), pero no puedo descubrir cómo usarla.

La clase se llama "UsageStatsManager", y supongo que la función"queryUsageStats" hace el trabajo.

Además, parece que tiene un nuevo permiso ("android.permission.PACKAGE_USAGE_STATS"), el cual es unpermiso del sistema, pero está escrito que:

declarar el permiso implica la intención de usar la API y el usuario del dispositivo puede otorgar permiso a través de la aplicación Configuración.

Aqui esta Otro enlace sobre esta nueva funcionalidad.

Lo que he encontrado

Miré el código de Android y noté que "Context" tiene USAGE_STATS_SERVICE, que en los JavaDoc dice lo siguiente:

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

Lo extraño es que no solo dice "status bar", pero también el packageName no coincide (debería ser"android.app.usage.UsageStatsManager"en su lugar).

También agregué el permiso correcto:

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

y aquí está el código que 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);

En el emulador en sí, fui a "Settings"->"security"->"apps with usage access"y habilité mi aplicación.

Sin embargo, cuando ejecuto el código, todo lo que obtengo es una lista vacía ...

La pregunta

Cómo usasUsageStatsManager ?

Además, ¿cómo permite que el usuario otorgue el permiso de la manera más fácil posible? ¿O se hace automáticamente, tan pronto como la aplicación intenta obtener la información necesaria?

¿Qué sucede cuando intento usar esta clase y el usuario aún no la ha confirmado?

¿Cómo puedo hacer que el código me devuelva una lista real de aplicaciones?

Respuestas a la pregunta(7)

Su respuesta a la pregunta