Как отслеживать использование других приложений в сети?
Я использую TrafficStats.getUidRxBytes
чтобы получить использование сети. Это прекрасно работает для моего приложения, но для других приложений всегда возвращает -1 (НЕ ПОДДЕРЖИВАЕТСЯ). Как я могу получить использование сети для других приложений без разрешения root?
1 ответ
Начиная с Android 7, вы можете запрашивать только трафик вашего приложения. От TraffixStats.getUidRxBytes
документы:
Начиная в
N
это только сообщит статистику трафика для вызывающего UID. Он вернет UNSUPPORTED для всех других UID по соображениям конфиденциальности. Для доступа к исторической статистике сети, принадлежащей другим UID, используйтеNetworkStatsManager
,
Собираюсь NetworkStatsManager
Вы могли бы использовать queryDetailsForUid
, но в документации ( https://developer.android.com/reference/android/app/usage/NetworkStatsManager.html) говорится:
ПРИМЕЧАНИЕ: вызов
querySummaryForDevice(int, String, long, long)
или доступ к статистике для приложений, отличных от вызывающего приложения, требует разрешенияPACKAGE_USAGE_STATS
, который является разрешением системного уровня и не будет предоставляться сторонним приложениям. Однако объявление разрешения подразумевает намерение использовать API, и пользователь устройства может предоставить разрешение через приложение "Настройки".
Так что имейте в виду, что пользователь должен дать специальное разрешение вашему приложению.
Редактировать:
Я использовал один раз UsageStatsManager
Я думаю, это то, что вы ищете: https://developer.android.com/reference/android/app/usage/UsageStatsManager.html