Android раздельное использование Wi-Fi и мобильных данных приложением (uid) с помощью getUidRxBytes / getUidTxBytes - PullRequest
1 голос
/ 03 февраля 2012

Я пытаюсь выяснить, как получить отдельное мобильное (сотовая связь / 3G / 4G) использование данных и отдельное использование WIFI с разбивкой по приложениям.Я вижу, что в android.trafficstats есть getUidRxBytes / getUidTxBytes, но в документации сказано, что он предоставляет байты, используемые во всех интерфейсах.

Мой вопрос: есть ли способ отделить то, что использовалось на Wifi и мобильном?Если так, как это можно сделать?

Ответы [ 4 ]

3 голосов
/ 14 декабря 2012

Вы можете использовать getMobileRxPackets (), чтобы разбить данные мобильного / Wi-Fi.Выезд TrafficStats

2 голосов
/ 27 декабря 2013

У меня есть идея для ее решения ...

Шаг 1. Проверьте тип сетевого подключения в Mobile of WiFi (используйте ConnectivityManager, NetworkInfo и т. Д.).

Шаг 2.Используйте SQLite для записи данных (getUidRxBytes + getUidTxBytes) и тега (если соединение с wifi пишите 'w' в SQLite), пример:

------------

*Тег 1008 * _id | uid | data *

1 123 10 w

2 123 50

------------

Шаг 3. Наконец, из 123 данных по мобильному использованию этого приложения 40 (50-10)

Есть предложения, добро пожаловать в обмен ...

0 голосов
/ 14 июля 2015

Вы можете проверить, как Android выполняет метод getUidRxBytes / getUidTxBytes.

В android_net_TrafficStats.cpp они все читают файлы, которые находятся в "/ proc / net / xt_qtaguid / iface_stat_fmt" и "/proc/net/xt_qtaguid/stat".

В "/ proc / net / xt_qtaguid / stat" вы можете получить байты используемого идентификатора пользователя, который разделяет данные Wi-Fi и мобильные телефоны на Android.

0 голосов
/ 12 марта 2012

Краткий ответ: Я не верю, что есть способ сделать это, если ваше приложение не подписано системным ключом.

Длинный ответ: Я тоже пытался это сделать.Приложение настроек ICS делает это в разделе «Использование данных».Я немного покопался в исходном коде ICS, но до сих пор не смог точно сказать, как это делается.Его нет в собственной реализации класса TrafficStats.

Я полагаю, что часть журналирования находится в классах NetworkStats и NetworkStatsHistory источника ICS.Кажется, NetworkStatsService собирает данные.Я не отслеживал точные методы или файл на диске, к которому они обращаются.

...