как посчитать 3g трафик на андроид?

Что я хочу сделать, так это подсчитать трафик 3G и WiFi соответственно. Теперь я знаю, что делать с WiFi. Ниже приведен исходный код WiFi. Таким образом, я могу подсчитать трафик WiFi для всех телефонов Android всех производителей. Но аналогичного способа для 3g я не нашел. Кто-нибудь знает?

//to get wifi interface  
private static String getProp(String prop){
    String output = "";
    try{
        Class<?> sp = Class.forName("android.os.SystemProperites");
        Method get = sp.getMethod("get",String.class);
        output = (String)get.invoke(null,prop);
    }catch(Exception e){
        e.printStackTrace();
    }
    return output;
}


//to get the traffic from system file
...
...
if (connectinTpe == ConnectivityManager.TYPE_WIFI){
    String wifiInterface = getProp("wifi.interface");
    if(wifiInterface == null || "".equals(wifiInterface)) wifiInterface = "eth0";
    rxFile = "/sys/class/net/" +wifiInterface+ "/statistics/rx_bytes";
    txFile = "/sys/class/net/" +wifiInterface+ "/statistics/tx_bytes";
}
...
...

person user924829    schedule 02.09.2011    source источник


Ответы (2)


Начиная с уровня API 8 (Android 2.2) существует класс TrafficStats. который обеспечивает то, что вам нужно:

Класс, предоставляющий статистику сетевого трафика. Эта статистика включает переданные и полученные байты, а также переданные и полученные сетевые пакеты по всем интерфейсам, по мобильному интерфейсу и для каждого UID.

В более старых версиях вы можете использовать упомянутый вами подход (т.е. чтение содержимого файла /sys/class/net/... файлов). Это сообщение в блоге содержит отличный сопоставление между TrafficStats методами и расположением файлов. И это сообщение SO содержит источник, который его автор использовал для чтения значений этих файлов. В соответствии с ним вы должны сначала попытаться прочитать число из файла «/sys/class/net/rmnet0/statistics/rx_bytes» (для значения «полученные байты»), а если это не удается, попробуйте вместо этого «/sys/class/net/ppp0/statistics/rx_bytes».

person Idolon    schedule 02.09.2011

чтобы получить текущий тип подключения, вы можете использовать TelephonyManager: http://developer.android.com/reference/android/telephony/TelephonyManager.html

сначала проверьте, подключено ли устройство к мобильному подключению для передачи данных по умолчанию, а затем проверьте тип подключения:

    if (connectinTpe == ConnectivityManager.TYPE_MOBILE)
    {
         TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
         int curConnectionType = tm.getNetworkType();

         if(curConnectionType >= /*connection type you are looking for*/)
         {
             // do what you want
         }
    }
person Rich    schedule 02.09.2011
comment
Автор спрашивал как считать 3G трафик, а не как определить текущий тип подключения - person Idolon; 02.09.2011