Найдите, сколько сетевого трафика генерируют другие приложения для Android
-
26-10-2019 - |
Вопрос
Я пытаюсь сделать фоновую услугу, которая должна измерить использование трафика различных приложений, чтобы иметь возможность показать пользователю, какой приложения потребляют большую часть трафика данных.
Я обнаружил, что приложение для запасных частей делает именно это, но после установки его на устройстве Dell Streak 1.6 я всегда получаю «Данные об использовании батареи» для «использования сети». Работает ли эта функция в запасных частях? Кроме того, я не мог найти рабочий исходный код для запасных частей.
https://android.googlesource.com/platform/development/+/froyo-release/apps/spareparts
выглядит устаревшим или неполным. (?)
Но запасные части, кажется, измеряют, например, использование процессора на приложение. Как это делает это на неровном телефоне?
Мое общее представление о том, как можно измерить трафик на приложение, - это регулярно проверять
"sys/class/net/" + sWiFiInterface + "/statistics/rx_bytes"
"sys/class/net/" + sWiFiInterface + "/statistics/tx_bytes"
"sys/class/net/" + sMobileInterface + "/statistics/rx_bytes"
"sys/class/net/" + sMobileInterface + "/statistics/tx_bytes"
файлы и увидеть, какое приложение в настоящее время сосредоточено, и, следовательно, скорее всего, вызовет сгенерированный сетевой трафик.
К сожалению, я не могу найти, как получить приложение, которое в настоящее время сосредоточено.
Я нашел это:
Но, кажется, речь идет о тестировании, а не только 3D-сервисе, работающем на устройстве Android, не выровненном.
Мы можем получить то, с какими действиями занимаются ActivityManager.getCurrentTasks()
, но любой из них может быть тем, кто сфокусирован. Похоже, что архитекторы Android явно не хотят, чтобы 3D -приложения знали, на каком приложении фокусируется из -за проблем безопасности
(видеть http://android.bygresource.com/track/android-zb2mhvzx4/).
Есть ли способ обойти это?
Кроме того, если я хочу не только обнаружить, какие виды деятельности съедают трафик, но и какие услуги я могу получить все в настоящее время услуги.ActivityManager.getCurrentSerives()
И даже посмотрите на каждый из них, если он находится в режиме переднего плана (в отличие от того, чтобы быть выброшенным, если Android нужны ресурсы). Но это снова не делает меня далеко.
Любые идеи?
Решение
Вы можете обнаружить в настоящее время на переднем плане применения с ActivityManager.getRunningAppProcesses
вызов. Он вернет список RunningAppProcessInfo
записи Чтобы определить, какое приложение находится на проверке переднего плана RunningAppProcessInfo.importance
поле для равенства в RunningAppProcessInfo.IMPORTANCE_FOREGROUND
.
Но будьте посвящены, чтобы призывать ActivityManager.getRunningAppProcesses()
Метод должен выполняться не в потоке пользовательского интерфейса. Просто назовите его в фоновом потоке (например, через Asynctask), и он вернет правильные результаты. Проверять мой пост Для получения дополнительной информации.