0

Я использую метод isAppInactive() от UsageStatsManager на Android 6 (API 23), чтобы определить состояние в режиме ожидания приложения, которое я разрабатываю.Android 6 UsageStatsManager isAppInactive() разрешение

docs подтверждают, что необходимо запросить разрешение PACKAGE_USAGE_STATS, но я могу использовать этот метод без запроса разрешения.

Это ошибка?

ответ

1

В 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-интерфейс должен быть публичным:

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 

Я надеваю Не думаю, что это ошибка, а только нечеткая документация.

Смежные вопросы