In UsageStatsService
there is a hasPermission
[1] method that checks if the permission PACKAGE_USAGE_STATS
is granted. It is used in this methods:
queryEvents
[2]
queryConfigurations
[3]
queryUsageStats
[4]
queryAndAggregateUsageStats
(it uses the same method of queryUsageStats
)
This is the code of isAppInactive
[5], and you can see how the permission is not requested:
@Override
public boolean isAppInactive(String packageName, int userId) {
try {
userId = ActivityManagerNative.getDefault().handleIncomingUser(Binder.getCallingPid(),
Binder.getCallingUid(), userId, false, true, "isAppInactive", null);
} catch (RemoteException re) {
return false;
}
final long token = Binder.clearCallingIdentity();
try {
return UsageStatsService.this.isAppIdleFilteredOrParoled(packageName, userId, -1);
} finally {
Binder.restoreCallingIdentity(token);
}
}
As you can see in the message of commit that adds isAppInactive
(originally is called isAppIdle
then it is renamed) the API should be public:
Add ability to get and set idle state of apps
Add am shell command to set and get idle
Add public API to check if an app is idle
I don't think this is a bug, but only an unclear documentation.