Как найти 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) и, скорее всего, изменит его в будущем. Я не могу достаточно подчеркнуть, как это нарушит ваше приложение, когда они снова захотят изменить.