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

下面代码放在工具类里:

[java] view plain copy
  1. publicstaticlonggetNetworkSpeed(Contextcontext){
  2. ProcessBuildercmd;
  3. longreadBytes=0;
  4. BufferedReaderbufferReader=null;
  5. try{
  6. String[]args={"/system/bin/cat","/proc/net/dev"};
  7. cmd=newProcessBuilder(args);
  8. Processprocess=cmd.start();
  9. bufferReader=newBufferedReader(newInputStreamReader(process.getInputStream()));
  10. Stringline;
  11. while((line=bufferReader.readLine())!=null){
  12. if(line.contains("wlan0")&&isWiFiNetworkAvailable(context)){
  13. String[]delim=line.split(":");
  14. if(delim.length>=2){
  15. Stringvalues=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. Stringvalues=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(Exceptionex){
  37. ex.printStackTrace();
  38. }finally{
  39. if(bufferReader!=null){
  40. try{
  41. bufferReader.close();
  42. }catch(IOExceptione){
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47. returnreadBytes;
  48. }
  49. //处理字符串数据的
  50. privatestaticStringnSpace2one(Strings){
  51. StringregEx="['']+";//一个或多个空格
  52. Patternp=Pattern.compile(regEx);
  53. Matcherm=p.matcher(s);
  54. Stringret=m.replaceAll(",").trim();
  55. returnret;
  56. }
  57. publicstaticbooleanisWiFiNetworkAvailable(Contextcontext){
  58. booleannetSataus=false;
  59. ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  60. NetworkInfonetinfo=cm.getActiveNetworkInfo();
  61. if(netinfo!=null&&netinfo.getType()==ConnectivityManager.TYPE_WIFI){
  62. netSataus=netinfo.isAvailable();
  63. }
  64. returnnetSataus;
  65. }
  66. publicstaticbooleanisNetworkAvailable(Contextcontext){
  67. booleannetSataus=false;
  68. ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  69. NetworkInfonetinfo=cm.getActiveNetworkInfo();
  70. if(netinfo!=null){
  71. netSataus=netinfo.isAvailable();
  72. }
  73. returnnetSataus;
  74. }

在Activity或fragment中调用上述工具类的方法:

[java] view plain copy
  1. privatelonglastTimeSpeed=0;
  2. privateTextViewshowNetWorkSpeed;
  3. privateHandlermHandler=newHandler();
  4. privateRunnableupdateCurrentNetWorkSpeed=newRunnable(){
  5. publicvoidrun(){
  6. longgetDataFlow=Utility.getNetworkSpeed(xxxActivity.this)/1024;//xxxActivity是你当前的Activity
  7. if(lastTimeSpeed==0){
  8. lastTimeSpeed=getDataFlow;
  9. }
  10. longshowSpeed=getDataFlow-lastTimeSpeed;
  11. lastTimeSpeed=getDataFlow;
  12. showNetWorkSpeed.setText(showSpeed+"k/s");
  13. mHandler.postDelayed(updateCurrentNetWorkSpeed,1000);
  14. }
  15. }

其实这里的getNetworkSpeed方法返回的并非当前网速,而是流量总值~~~

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

更多相关文章

  1. Android中不用Service跨Avtivity仍然可以播放音乐的一个简单方法
  2. Android错误解决方法之:Debug certificate expired on
  3. Android(安卓)dispatchTouchEvent
  4. 利用Handler更新Android(安卓)UI的另一种方法
  5. android中常用的弹出提示框
  6. Android(安卓)Activity加载Fragment的一般简易方法
  7. Android中发送短信等普通方法
  8. Android子线程更新View的探索
  9. Android下实现tab页个人比较推崇的方法

随机推荐

  1. Android的TextView与Html相结合的用法
  2. android:process的最大的坑
  3. Android关于RecycleView不走onBindViewHo
  4. Android启动过程图解
  5. Intent详解 (一) : 显式Intent
  6. Notification详细用法
  7. Android下可用的wide char 函数库
  8. Android学习RecyclerView小结
  9. [热文]Android(安卓)系统开发之-----boot
  10. Android开发规范实战