Фон
Я пытаюсь получить запущенную приложением статистику, и в Lollipop это возможно с помощью класса UsageStatsManager, как такового (оригинальный пост здесь):
проявляются:
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions"/>
открытие действия, которое позволит пользователю подтвердить предоставление вам этого разрешения:
startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
Получение статистики, агрегированной:
private static final String USAGE_STATS_SERVICE ="usagestats"; // Context.USAGE_STATS_SERVICE);
...
final UsageStatsManager usageStatsManager=(UsageStatsManager)context.getSystemService(USAGE_STATS_SERVICE);
final Map<String,UsageStats> queryUsageStats=usageStatsManager.queryAndAggregateUsageStats(fromTime,toTime);
Эта проблема
Я не могу проверить, предоставлено ли вам необходимое разрешение ("android.permission.PACKAGE_USAGE_STATS"). Все, что я пробовал до сих пор, всегда возвращает, что это отрицается.
Код работает, но проверка разрешений не работает.
Что я пробовал
Вы можете проверить разрешение, используя это:
String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getContext().checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
или это:
String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getPackageManager().checkPermission(permission,getPackageName())== PackageManager.PERMISSION_GRANTED;
Оба всегда возвращали, что ему отказали (даже когда я предоставил разрешение как пользователь).
Глядя на код UsageStatsManager, я попытался найти этот обходной путь:
UsageStatsManager usm=(UsageStatsManager)getSystemService("usagestats");
Calendar calendar=Calendar.getInstance();
long toTime=calendar.getTimeInMillis();
calendar.add(Calendar.YEAR,-1);
long fromTime=calendar.getTimeInMillis();
final List<UsageStats> queryUsageStats=usm.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,fromTime,toTime);
boolean granted=queryUsageStats!=null&&queryUsageStats!=Collections.EMPTY_LIST;
Это сработало, но это все еще обходной путь.
Вопрос
Почему я не получил правильный результат проверки разрешений?
Что нужно сделать, чтобы проверить это лучше?