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

下面代码放在工具类里:

[java] view plaincopy
  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. public static boolean isWiFiNetworkAvailable(Context context) {
  58. boolean netSataus = false;
  59. ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  60. NetworkInfo netinfo = cm.getActiveNetworkInfo();
  61. if (netinfo != null && netinfo.getType() == ConnectivityManager.TYPE_WIFI) {
  62. netSataus = netinfo.isAvailable();
  63. }
  64. return netSataus;
  65. }
  66. public static boolean isNetworkAvailable(Context context) {
  67. boolean netSataus = false;
  68. ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  69. NetworkInfo netinfo = cm.getActiveNetworkInfo();
  70. if (netinfo != null) {
  71. netSataus = netinfo.isAvailable();
  72. }
  73. return netSataus;
  74. }

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

[java] view plaincopy
  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 学习笔记之二 Netspeed相关推荐

  1. 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner

    目录(?)[-] GridView Spinner GridView GridView是网格状布局,如图所示.在了解ListView后,很容易了解GridView.下面是例子的XML文件. <? ...

  2. Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    xml控件代码重用:include 如果我们定义一个控件,需要在不同的layout中重复使用,或者在同一个layout中重复使用,可以采用include的方式.例如定义my_button.xml如下 ...

  3. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  4. 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout...

    目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...

  5. Android学习笔记——Menu(二)

    知识点: 这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu). 上下文菜单 上下文菜单提供对UI界面上的特定项或上下文框架的操作,就 ...

  6. Android学习笔记(二)——TextView常用属性以及下划线、跑马灯设置

    属性 Textsize:字体的大小(单位Px) Textcolor:字体的颜色 text:文本内容.(设置文本内容也可以在activity中通过函数是setText()设置,可以传入字符串也可以传入整 ...

  7. Android学习笔记(二)

    在苏联的谷歌,你的界面呈现 在移动 UI 架构开发的混战中, Android 上升到首位.如果你有一些移动体验,你会发现它是一个 Java ME 的 Canvas / Screen 对象和 BREW ...

  8. android文件存储token,ANDROID 学习笔记(二) 用户登陆问题 TOKEN SESSION 缓存

    首先介绍TOKEN 缓存问题 写个工具类 里面放入 /* * 获取缓存的token */ public static String getCachedToken(Context context){ r ...

  9. ANDROID 学习笔记(二) 用户登陆问题 TOKEN SESSION 缓存

    为什么80%的码农都做不了架构师?>>>    首先介绍TOKEN 缓存问题 写个工具类 里面放入 /** 获取缓存的token*/public static String getC ...

最新文章

  1. 管理序列+序列的伪列+修改序列+删除序列
  2. POJ - 2002 Squares 数正方形【二分】【哈希表】
  3. php函数内调用类的变量,php - 如何调用一个类变量的闭包?
  4. american php frameworks
  5. app端微信支付(二) - 生成预付单
  6. 浏览器打印设置横向打印_爱普生打印机无线连接设置
  7. Java集合(三):Queue队列
  8. 第一次个人项目【词频统计】——PSP表格
  9. Cache之全相连映射
  10. Docker镜像优化:从1.16GB到22.4MB,真强!
  11. Delphi编写事件模型客户端(3)
  12. 电子工程师必须知道的12个知识
  13. android x5全屏白色,x5webview 自定义全屏界面(示例代码)
  14. 三节锂电池充电芯片,IC设计模块的几种电路
  15. excel行列互换_Excel中选择性粘贴的5种用法,别再仅仅复制-粘贴了
  16. Vue-cli配置代理服务器,解决跨域请求问题
  17. 读书笔记:Google软件测试之道
  18. DBC文件解析,基于致远电子DBC_demo
  19. < 谈谈对 SPA(单页面应用)的理解 >
  20. xinetd(安装及配置xinetd)

热门文章

  1. 读书笔记:少有人走的路
  2. 用Python写一个纪念日计算工具
  3. OpenCV+Python 彩色图片的 BGR、灰度图、HSV分量图显示的程序
  4. Mongodb- paly中操作mongodb记录
  5. 父窗口操控iframe
  6. 弱电机房工程搬迁工作内容(方案)
  7. C++春招实习和秋招面试过程记录
  8. Microsoft SQL Server笔记整理
  9. 斐波那契数列+pyton
  10. php输出英文格式的日期