Как отслеживать использование других приложений в сети?

Я использую 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

Другие вопросы по тегам