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

Я использую TrafficStats.getUidRxBytes для получения данных об использовании сети. Он отлично работает для моего приложения, но для других приложений всегда возвращает -1 (НЕ ПОДДЕРЖИВАЕТСЯ). Как я могу получить использование сети для других приложений без разрешения root?


person amirreza sh    schedule 30.01.2018    source источник
comment
Используйте приложения для мониторинга приложений...   -  person B001ᛦ    schedule 30.01.2018
comment
@ B001 Мне нужно добавить эту функцию в свое приложение.   -  person amirreza sh    schedule 30.01.2018
comment
Но зачем изобретать велосипед?   -  person B001ᛦ    schedule 30.01.2018
comment
@ B001 Я разрабатываю приложение с информацией о сети.   -  person amirreza sh    schedule 30.01.2018
comment
@amirrezash, пожалуйста, проверьте мой ответ. Если это ответ на ваш вопрос, отметьте как правильный   -  person Eduardo Herzer    schedule 30.01.2018


Ответы (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)

person Eduardo Herzer    schedule 30.01.2018