Фон
Google отвергла функцию " getRecentTasks
" класса ActivityManager. Теперь все, что нужно сделать, - это получить список приложений, которые открыло текущее приложение.
Я даже написал сообщение об этом qaru.site/info/30242/..., но я заметил, что это невозможно.
Проблема
Я сделал сообщение об этом ( здесь, а другой, подобный, созданный кем-то другим, здесь) и попросил пересмотреть его, и Google решил создать новый класс, который, похоже, обеспечивают аналогичную функциональность (скорее, статистику, но также могут быть полезны), но я не могу узнать, как ее использовать.
Класс называется "UsageStatsManager
", и я предполагаю, что функция " queryUsageStats
"выполняет эту работу.
Кроме того, похоже, что у него есть новое разрешение ( "android.permission.PACKAGE_USAGE_STATS
" ), которое является системным разрешением, но оно написано, что:
Объявление разрешения подразумевает намерение использовать API и пользователя устройства может предоставить разрешение через приложение "Настройки".
Вот еще одна ссылка об этой новой функциональности.
Что я нашел
Я просмотрел код Android и заметил, что "Контекст" имеет 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 bar
", но и имя пакета не совпадает (должно быть "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
?
Кроме того, как вы разрешаете пользователю предоставлять разрешение самым простым способом? Или это автоматически делается, как только приложение пытается получить необходимую информацию?
Что происходит при попытке использовать этот класс, пока пользователь еще не подтвердил его?
Как я могу заставить код вернуть мне реальный список приложений?