Как использовать UsageStatsManager?

Фон

Google устарел функции "getRecentTasks"класса" ActivityManager ". Теперь все, что он делает, это получает список приложений, которые открыло текущее приложение.

Я даже написал пост об этомздесь, на StackOverflow, но я заметил, что это невозможно.

Эта проблема

Я сделал пост об этом (Воти другой, похожий, созданный кем-то другим,Вот) и попросил пересмотреть его, и Google решил создать новый класс, который, по-видимому, предоставляет аналогичную функциональность (больше похожую на статистику, но также может быть полезна), но я не могу выяснить, как его использовать.

Класс называетсяUsageStatsManager«и я думаю, что функция»queryUsageStats"делает работу.

Кроме того, похоже, у него есть новое разрешение ("android.permission.PACKAGE_USAGE_STATS"), который являетсяразрешение системы, но написано что:

объявление разрешения подразумевает намерение использовать API, и пользователь устройства может предоставить разрешение через приложение «Настройки».

Вот Еще одна ссылка об этой новой функциональности.

Что я нашел

Я посмотрел на код Android и заметил, что у «Context» есть 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 barmsgstr ", но также имя пакета не совпадает (должно быть"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 ?

Кроме того, как вы позволяете пользователю предоставлять разрешение самым простым способом? Или это делается автоматически, как только приложение пытается получить необходимую информацию?

Что происходит при попытке использовать этот класс, пока пользователь еще не подтвердил это?

Как сделать так, чтобы код возвращал мне реальный список приложений?

Ответы на вопрос(7)

Ваш ответ на вопрос