который даже делает измерение трафика без запуска фоновой службы. Теперь пытаюсь выяснить, могу ли я сделать это таким же образом, а также попытаться отнести трафик к активности на переднем плане.
аюсь создать фоновый сервис, который должен измерять использование трафика различными приложениями, чтобы иметь возможность показать пользователю, какие приложения потребляют большую часть трафика данных.
Я обнаружил, что приложение Spare Parts делает именно это, но после его установки на устройство Dell Streak 1.6, я всегда получаю «Нет данных об использовании батареи» для «Использование сети». Эта функция вообще работает в Запасных частях? Также я не смог найти рабочий исходный код для Spare Parts.
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"
файлы и посмотреть, какое приложение в настоящее время имеет фокус и, таким образом, наиболее вероятно, вызовет сгенерированный сетевой трафик.
К сожалению, я не могу найти способ сфокусироваться на приложении.
Я нашел это:
Android, как получить информацию о том, какие действия в настоящее время показывает (в foregorund)?
но, похоже, речь идет о тестировании, а не только о стороннем сервисе, работающем на некорневом устройстве Android.
Мы можем узнать, какие виды деятельности работают сActivityManager.getCurrentTasks()
, но любой из них может быть тем, у которого есть фокус. Похоже, что архитекторы Android явно не хотят, чтобы сторонние приложения знали, на какое приложение нацелено внимание, из соображений безопасности
(видетьhttp://android.bigresource.com/Track/android-zb2mhvZX4/).
Это можно обойти?
Кроме того, если я хочу не только определить, какие действия потребляют трафик, но также и какие сервисы, я могу получить все запущенные сервисы сActivityManager.getCurrentSerives()
и даже посмотреть для каждого, находится ли он в режиме переднего плана (в отличие от того, чтобы быть выброшенным, если Android нужны ресурсы). Но это опять-таки не подводит меня далеко.
Есть идеи?