как посчитать 3g трафик в андроид моб? - PullRequest
9 голосов
/ 02 сентября 2011

Что я хочу сделать, так это считать трафик 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";
}
...
...

Ответы [ 2 ]

7 голосов
/ 02 сентября 2011

Начиная с уровня 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".

0 голосов
/ 02 сентября 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
         }
    }
...