2011-09-02 36 views
8

Điều tôi muốn làm là tính lưu lượng truy cập 3G và lưu lượng truy cập WiFi tương ứng. Bây giờ tôi biết làm thế nào để làm với WiFi. Dưới đây là mã nguồn cho WiFi. Bằng cách này tôi có thể đếm lưu lượng truy cập WiFi cho tất cả các điện thoại Android của tất cả các nhà sản xuất. Nhưng tôi đã không tìm thấy một cách tương tự cho 3g. Có ai biết không?cách tính lưu lượng truy cập 3g trong điện thoại di động 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"; 
} 
... 
... 

Trả lời

0

để có được những loại hiện tại của kết nối, bạn có thể sử dụng TelephonyManager: http://developer.android.com/reference/android/telephony/TelephonyManager.html

kiểm tra đầu tiên nếu thiết bị được kết nối với các kết nối dữ liệu di động mặc định và sau đó kiểm tra các loại kết nối:

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

Tác giả đã hỏi cách tính lưu lượng truy cập 3G chứ không phải cách xác định loại kết nối hiện tại – Idolon

7

Bắt đầu từ cấp API 8 (Android 2.2) có một lớp học TrafficStats cung cấp những gì bạn cần:

Lớp cung cấp thống kê lưu lượng mạng. Các số liệu thống kê bao gồm các byte được truyền và nhận và các gói mạng được truyền và nhận được, trên tất cả các giao diện, qua giao diện di động và trên cơ sở trên mỗi UID.

Trên các phiên bản cũ hơn, bạn có thể sử dụng phương pháp bạn đã đề cập (tức là đọc nội dung tệp của /sys/class/net/... tệp). This blog post chứa bản đồ tuyệt vời giữa các phương pháp và vị trí tệp TrafficStats. Và this SO post chứa nguồn tác giả của nó được sử dụng để đọc các giá trị tệp đó. Theo đó, trước tiên bạn nên thử đọc số từ tập tin "/sys/class/net/rmnet0/statistics/rx_bytes" (đối với giá trị "byte nhận được") và nếu nó không cố gắng "/sys/class/net/ppp0/statistics/rx_bytes" thay thế.

Các vấn đề liên quan