2011-09-02 10 views
8

Lo que quiero hacer es contar tráfico 3G y tráfico WiFi, respectivamente. Ahora sé cómo hacerlo con WiFi. A continuación se muestra el código fuente de WiFi. De esta forma puedo contar el tráfico WiFi para todos los teléfonos Android de todos los fabricantes. Pero no he encontrado una manera similar para 3g. ¿Alguien sabe?cómo contar 3g de tráfico en el móvil Android?

//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"; 
} 
... 
... 

Respuesta

0

para obtener el tipo actual de la conexión puede utilizar el TelephonyManager: http://developer.android.com/reference/android/telephony/TelephonyManager.html

primer cheque si el dispositivo está conectado a la conexión de datos móviles por defecto y luego verifique el tipo de conexión:

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 
     } 
    } 
+4

El autor preguntó cómo contar el tráfico 3G, y no cómo determinar el tipo actual de conexión – Idolon

7

A partir de API nivel 8 (Android 2.2) hay una clase TrafficStats que proporciona lo que necesita:

Clase que proporciona estadísticas de tráfico de red. Estas estadísticas incluyen los bytes transmitidos y recibidos y los paquetes de red transmitidos y recibidos, en todas las interfaces, a través de la interfaz móvil, y en una base de por UID.

En las versiones anteriores, puede usar el enfoque mencionado (es decir, leer el contenido del archivo de /sys/class/net/... archivos). This blog post contiene una excelente asignación entre TrafficStats métodos y ubicaciones de archivos. Y this SO post contiene la fuente que su autor utilizó para leer esos archivos. De acuerdo con esto, primero debe intentar leer el número del archivo "/sys/class/net/rmnet0/statistics/rx_bytes" (para el valor de "bytes recibidos") y, si falla, intente con "/sys/class/net/ppp0/statistics/rx_bytes".

Cuestiones relacionadas