Android 6 UsageStatsManager isAppInactive() 权限

Android 6 UsageStatsManager isAppInactive() permission

我正在使用 UsageStatsManager class 在 Android 6 (API 23) 上的 isAppInactive() 方法来检测应用程序的待机状态我发展中。

docs确认有必要请求PACKAGE_USAGE_STATS许可,但我可以在不请求许可的情况下使用该方法。

这是一个错误吗?

UsageStatsService中有一个hasPermission[1]方法检查权限PACKAGE_USAGE_STATS是否被授予。它用于此方法:

  • queryEvents [2]
  • queryConfigurations [3]
  • queryUsageStats [4]
  • queryAndAggregateUsageStats(使用与queryUsageStats相同的方法)

这是isAppInactive[5]的代码,可以看到不请求权限的情况:

@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);
    }
}

正如您在commit的消息中看到的那样添加了isAppInactive(最初称为isAppIdle,然后重命名)API应该是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

我不认为这是一个错误,而只是一个不清楚的文档。