Как найти Wi-Fi и сетевое использование данных отдельно по конкретному приложению в android?
recived = TrafficStats.getUidRxBytes(uid);
send = TrafficStats.getUidTxBytes(uid);
TrafficStats.getMobileRxBytes();
TrafficStats.getMobileTxBytes();
TrafficStats.getTotalRxBytes();
TrafficStats.getTotalTxBytes();
У меня есть идентификатор приложения, и я могу получить это использование данных приложений, но я не могу получить информацию более подробно, как использование данных с использованием Wi-Fi и сети. Я хочу найти как отдельно для всех установленных приложений на устройстве. как я могу это найти? я уже много пробовал, но не получил никакого решения.
Ответы
Ответ 1
Я думаю, вы должны использовать альтернативный путь, получить трафик с помощью UID, например - getUidRxPackets (int uid)
Также полезно (как получить UID): (Как установить все приложения на Android-телефоне)
EDIT:
Можете ли вы рассказать мне, как я могу определить, сколько данных используется Wi-Fi и Мобильный??.
Там хороший ответ - статистика Android 3g для каждого APP, как? посмотреть его логику.
Ответ 2
К сожалению, нет публичных API-интерфейсов для получения этой информации с уровня API 19; вы указали API TrafficStats
, которые общедоступны. Android делает это с использованием внутренних API-интерфейсов, поэтому, если вы не хотите идти по этой дороге (которая действительно НЕОБХОДИМАЯ идея и ВЫСОКО обескуражена Google), вам пока что не повезло.
ИЗМЕНИТЬ:
Если вы INSIST используете внутренние API-интерфейсы и рискуете нарушением кода в различных версиях API, обратитесь к следующим ссылкам и обязательно прочитайте их полностью:
Перекомпилировать Android SDK для использования скрытых и внутренних API
Перекомпиляция Android SDK для Gingerbread и более поздних версий
После того, как вы это выполнили, этот файл предоставит вам наибольшую помощь в его определении:
packages/apps/Settings/src/com/android/settings/fuelgauge/BatteryStatsHelper.java
Вам придется либо скопировать много кода из файла, либо найти функцию processAppUsage()
и потянуть все, что вам нужно. В частности, найдите следующие строки:
// Add cost of wifi traffic
final long wifiRx = u.getNetworkActivityCount(NETWORK_WIFI_RX_BYTES, mStatsType);
final long wifiTx = u.getNetworkActivityCount(NETWORK_WIFI_TX_BYTES, mStatsType);
Последнее замечание: Android JUST изменил этот код в KitKat (API 19) и, скорее всего, изменит его в будущем. Я не могу достаточно подчеркнуть, как это нарушит ваше приложение, когда они снова захотят изменить.