2011-09-02 32 views
8

我想要做的是分別計算3G流量和WiFi流量。現在我知道如何處理WiFi。以下是WiFi的源代碼。通過這種方式,我可以計算所有制造商的所有Android手機的WiFi流量。但我還沒有找到類似的方式爲3G。有人知道嗎?如何統計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"; 
} 
... 
... 

回答

0

來獲得當前的連接類型,你可以使用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 
     } 
    } 
+4

作者問如何計算3G流量,而不是如何確定當前的連接類型 – Idolon

7

從API級別8(Android 2.2)開始,有一個類別TrafficStats,它提供您需要的內容:

提供網絡流量統計的類。這些統計數據 包括髮送和接收的字節以及發送的網絡數據包 並且通過移動接口在所有接口上以及基於每個UID接收。

在舊版本,你可以使用你提到(的/sys/class/net/...文件即讀取文件內容)的方式。 This blog post包含TrafficStats方法和文件位置之間的良好映射。並且this SO post包含其作者用於讀取這些文件值的源。根據它,你應該首先嚐試從「/sys/class/net/rmnet0/statistics/rx_bytes」文件中讀取數字(對於「接收字節」值),如果失敗,請嘗試使用「/sys/class/net/ppp0/statistics/rx_bytes」。

相關問題