Android 学习笔记之二 Netspeed

今天看项目源码发现获取Android网速有问题,就此改了一下,做个笔记留给自己看。

下面代码放在工具类里:

[java]  view plain  copy
 
  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
 
  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方法返回的并非当前网速,而是流量总值~~~

获取流量的方法并不是我写的。欢迎各位大神指出问题,指导下哈~~

你可能感兴趣的:(源码,Android开发)