Я использую TrafficStats.getUidRxBytes
для получения данных об использовании сети. Он отлично работает для моего приложения, но для других приложений всегда возвращает -1 (НЕ ПОДДЕРЖИВАЕТСЯ). Как я могу получить использование сети для других приложений без разрешения root?
Как контролировать использование сети другими приложениями?
Ответы (1)
Начиная с Android 7, вы можете запрашивать только использование трафика вашего собственного приложения. Из TraffixStats.getUidRxBytes
документов:
Начиная с
N
это будет сообщать статистику трафика только для вызывающего UID. По соображениям конфиденциальности для всех других UID будет возвращено UNSUPPORTED. Чтобы получить доступ к исторической сетевой статистике, относящейся к другим 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#queryUsageStats(int,%20long,%20long)