Android 學習筆記之二 Netspeed

今天看項目源碼發現獲取Android網速有問題,就此改了一下,做個筆記留給自己看。

下面代碼放在工具類裏:

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. public static long getNetworkSpeed(Context context) {  
  2.     ProcessBuilder cmd;  
  3.     long readBytes = 0;  
  4.     BufferedReader bufferReader = null;  
  5.     try {  
  6.         String[] args = { "/system/bin/cat""/proc/net/dev" };  
  7.         cmd = new ProcessBuilder(args);  
  8.         Process process = cmd.start();  
  9.         bufferReader = new BufferedReader(new InputStreamReader(process.getInputStream()));  
  10.         String line;  
  11.         while ((line = bufferReader.readLine()) != null) {  
  12.             if (line.contains("wlan0") && isWiFiNetworkAvailable(context)) {  
  13.                 String[] delim = line.split(":");  
  14.                 if (delim.length >= 2) {  
  15.                     String values = delim[1].trim();  
  16.                     values = nSpace2one(values);  
  17.                     String[] numbers = values.split(",");// 提取數據  
  18.                     readBytes = Long.parseLong(numbers[0].trim());  
  19.                     readBytes += Long.parseLong(numbers[8].trim());  
  20.                     break;  
  21.                 }  
  22.             }  
  23.             if (line.contains("eth0") && isEthernetNetworkAvailable(context)) {  
  24.                 String[] delim = line.split(":");  
  25.                 if (delim.length >= 2) {  
  26.                     String values = delim[1].trim();  
  27.                     values = nSpace2one(values);  
  28.                     String[] numbers = values.split(",");  
  29.                     readBytes = Long.parseLong(numbers[0].trim());  
  30.                     readBytes += Long.parseLong(numbers[8].trim());  
  31.                     break;  
  32.                 }  
  33.             }  
  34.         }  
  35.         bufferReader.close();  
  36.     } catch (Exception ex) {  
  37.         ex.printStackTrace();  
  38.     } finally {  
  39.         if (bufferReader != null) {  
  40.             try {  
  41.                 bufferReader.close();  
  42.             } catch (IOException e) {  
  43.                 e.printStackTrace();  
  44.             }  
  45.         }  
  46.     }  
  47.     return readBytes;  
  48. }  
  49. //處理字符串數據的  
  50. private static String nSpace2one(String s) {  
  51.     String regEx = "[' ']+"// 一個或多個空格  
  52.     Pattern p = Pattern.compile(regEx);  
  53.     Matcher m = p.matcher(s);  
  54.     String ret = m.replaceAll(",").trim();  
  55.     return ret;  
  56. }  
  57.   
  58. public static boolean isWiFiNetworkAvailable(Context context) {  
  59.     boolean netSataus = false;  
  60.     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
  61.     NetworkInfo netinfo = cm.getActiveNetworkInfo();  
  62.     if (netinfo != null && netinfo.getType() == ConnectivityManager.TYPE_WIFI) {  
  63.         netSataus = netinfo.isAvailable();  
  64.     }  
  65.     return netSataus;  
  66. }  
  67.   
  68. public static boolean isNetworkAvailable(Context context) {  
  69.     boolean netSataus = false;  
  70.     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
  71.     NetworkInfo netinfo = cm.getActiveNetworkInfo();  
  72.     if (netinfo != null) {  
  73.         netSataus = netinfo.isAvailable();  
  74.     }  
  75.     return netSataus;  
  76. }  

在Activity或fragment中調用上述工具類的方法:

[java] view plain copy
 在CODE上查看代碼片派生到我的代碼片
  1. private long lastTimeSpeed = 0;  
  2. private TextView showNetWorkSpeed;  
  3. private Handler mHandler = new Handler();  
  4. private Runnable updateCurrentNetWorkSpeed = new Runnable() {  
  5.     public void run() {  
  6.         long getDataFlow = Utility.getNetworkSpeed(xxxActivity.this) / 1024;//xxxActivity是你當前的Activity  
  7.         if(lastTimeSpeed==0){  
  8.             lastTimeSpeed = getDataFlow;  
  9.         }  
  10.         long showSpeed = getDataFlow - lastTimeSpeed;  
  11.         lastTimeSpeed = getDataFlow;  
  12.         showNetWorkSpeed.setText(showSpeed+"k/s");  
  13.         mHandler.postDelayed(updateCurrentNetWorkSpeed, 1000);  
  14.     }  
  15. }  

其實這裏的getNetworkSpeed方法返回的並非當前網速,而是流量總值~~~

獲取流量的方法並不是我寫的。歡迎各位大神指出問題,指導下哈~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章