一、实现思路:

1、Android提供有获取当前总流量的方法

2、上一秒 减去 下一面的流量差便是网速

3、注意计算

二、计算网速的工具类:

package imcs.cb.com.viewapplication.utils;

import android.content.Context;

import android.net.TrafficStats;

import android.os.Handler;

import android.os.Message;

import java.util.Timer;

import java.util.TimerTask;

/**

* Created by Ricky on 2016/10/13.

*/

public class NetWorkSpeedUtils {

private Context context;

private Handler mHandler;

private long lastTotalRxBytes = 0;

private long lastTimeStamp = 0;

public NetWorkSpeedUtils(Context context, Handler mHandler){

this.context = context;

this.mHandler = mHandler;

}

TimerTask task = new TimerTask() {

@Override

public void run() {

showNetSpeed();

}

};

public void startShowNetSpeed(){

lastTotalRxBytes = getTotalRxBytes();

lastTimeStamp = System.currentTimeMillis();

new Timer().schedule(task, 1000, 1000); // 1s后启动任务,每2s执行一次

}

private long getTotalRxBytes() {

return TrafficStats.getUidRxBytes(context.getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ? 0 :(TrafficStats.getTotalRxBytes()/1024);//转为KB

}

private void showNetSpeed() {

long nowTotalRxBytes = getTotalRxBytes();

long nowTimeStamp = System.currentTimeMillis();

long speed = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 / (nowTimeStamp - lastTimeStamp));//毫秒转换

long speed2 = ((nowTotalRxBytes - lastTotalRxBytes) * 1000 % (nowTimeStamp - lastTimeStamp));//毫秒转换

lastTimeStamp = nowTimeStamp;

lastTotalRxBytes = nowTotalRxBytes;

Message msg = mHandler.obtainMessage();

msg.what = 100;

msg.obj = String.valueOf(speed) + "." + String.valueOf(speed2) + " kb/s";

mHandler.sendMessage(msg);//更新界面

}

}

三、使用:

private Handler mHnadler = new Handler(){

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 100:

tv_speed.setText("当前网速: " + msg.obj.toString());

break;

}

super.handleMessage(msg);

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv_speed = (TextView) findViewById(R.id.tv_speed);

new NetWorkSpeedUtils(this,mHnadler).startShowNetSpeed();

}

//-------------------------------------------------------

private long rxtxTotal =0;

private DecimalFormat showFloatFormat =new DecimalFormat("0.00");

public void updateViewData() {

long tempSum = TrafficStats.getTotalRxBytes()

+ TrafficStats.getTotalTxBytes();

long rxtxLast = tempSum -rxtxTotal;

double totalSpeed= rxtxLast *1000 /2000d;

rxtxTotal = tempSum;

wangsu.setText("当前网速:" + showSpeed(totalSpeed));  //设置显示当前网速

}

private String showSpeed(double speed) {

String speedString;

if (speed >=1048576d) {

speedString =showFloatFormat.format(speed /1048576d) +"MB/s";

}else {

speedString =showFloatFormat.format(speed /1024d) +"KB/s";

}

return speedString;

}

作者:一曲烟雨伊人醉

链接:https://www.jianshu.com/p/377ffb0f24ad

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

然后开启计时器 轮询访问updateViewData()方法即可 实现

//----------------------------------------------------------------

package imcs.cb.com.viewapplication.utils;

import android.content.Context;

import android.net.TrafficStats;

import android.os.Handler;

import android.os.Message;

import java.util.Timer;

import java.util.TimerTask;

/**

* Created by Ricky on 2016/10/13.

*/

public

class NetWorkSpeedUtils{

private Context context;

private Handler mHandler;

private

long lastTotalRxBytes =

0;

private

long lastTimeStamp =

0;

public NetWorkSpeedUtils(Context context, Handler mHandler){

this.context = context;

this.mHandler = mHandler;

}

TimerTask task =

new TimerTask() {

@Override

public void run(){

showNetSpeed();

}

};

public void startShowNetSpeed(){

lastTotalRxBytes = getTotalRxBytes();

lastTimeStamp = System.currentTimeMillis();

new Timer().schedule(task,

1000,

1000);

// 1s后启动任务,每2s执行一次

}

private long getTotalRxBytes(){

return TrafficStats.getUidRxBytes(context.getApplicationInfo().uid) == TrafficStats.UNSUPPORTED ?

0 :(TrafficStats.getTotalRxBytes()/

1024);

//转为KB

}

private void showNetSpeed(){

long nowTotalRxBytes = getTotalRxBytes();

long nowTimeStamp = System.currentTimeMillis();

long speed = ((nowTotalRxBytes - lastTotalRxBytes) *

1000 / (nowTimeStamp - lastTimeStamp));

//毫秒转换

long speed2 = ((nowTotalRxBytes - lastTotalRxBytes) *

1000 % (nowTimeStamp - lastTimeStamp));

//毫秒转换

lastTimeStamp = nowTimeStamp;

lastTotalRxBytes = nowTotalRxBytes;

Message msg = mHandler.obtainMessage();

msg.what =

100;

msg.obj = String.valueOf(speed) +

"." + String.valueOf(speed2) +

" kb/s";

mHandler.sendMessage(msg);

//更新界面

}

}

java实时获取android网速_Android中获取实时网速(2)相关推荐

  1. android 常用机型尺寸_Android中获取手机屏幕大小的方法

    本文为大家解析Android中如何获取手机屏幕大小,提供一个解决方法,分享给大家供大家参考,具体内容如下 运行效果图: 运行程序后,当我们点击Button按钮时,可以看到下面的效果图: 具体代码: 我 ...

  2. android获取imei兼容_Android中获取IMEI码的方法

    公共请求头 所有HTTP请求中,都包含如下公共请求头(HTTP Header): 名称 类型 是否必需 描述 Accept String 是 接受的返回类型,目前只支持JSON:application ...

  3. java memcached 存储对象_java – 从Memcache中获取低级别数据存储区实体对象时的慢速反序列化...

    事实证明,检索存储内存缓存的低级数据存储实体非常缓慢.由于objectify将实体缓存为低级数据存储区实体类型,因此当使用objectify从memcache中获取许多实体时,这会导致性能不佳. 真正 ...

  4. java向另一activity输入_Android中调用另一个Activity并返回结果-以模拟选择头像功能为例...

    场景 Android中点击按钮启动另一个Activity以及Activity之间传值: 在上面启动Activity和传值之后,怎样获取Acitvity的返回值.下面示例实现点击选择头像按钮,跳转到头像 ...

  5. android代码 IMEI,Android_Android中获取IMEI码的方法,核心代码:Imei = ((TelephonyManager) - phpStudy...

    Android中获取IMEI码的方法 核心代码:Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) .getDeviceId ...

  6. java获取数据库当前时间_java中获取系统的当前时间

    转自:http://www.cnblogs.com/Matrix54/archive/2012/05/01/2478158.html 一. 获取当前系统时间和日期并格式化输出: import java ...

  7. java 获取键盘点击_Java中获取键盘输入值的三种方法介绍

    程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这 ...

  8. android pcm文件大小_Android中的PCM设备

    Android上的应用一般都是通过AudioTrack类来播放音频,通过AudioRecord类来录制音频.AudioTrack类和AudioRecord类是Android Frameworks封装提 ...

  9. android 按钮换行_android 中组件怎么换行

    展开全部 应用中获取会用到需要自动换行的控件,而这并不是一般的线性或者相对布局62616964757a686964616fe78988e69d8331333337613864就能实现的,在此分享下自定 ...

最新文章

  1. 干货 | 详解对象检测模型中的Anchors
  2. Docker概述和安装部署
  3. nfc pm3 模拟加密门禁卡_华为手机NFC的妙用,模拟门禁卡、公交卡、银行卡,电子证件等...
  4. 面试重点:设计模式(二)——创建模式
  5. Android动画模式
  6. 安卓Dialog对话框多次显示而闪退的解决办法
  7. C语言 文件读写 fputc 函数 - C语言零基础入门教程
  8. 2048java课程设计报告_软件工程——Java版2048游戏学习报告
  9. 2020年视频号发展白皮书
  10. 趣谈 JOIN 操作
  11. Qt与Visual Assitst X的集成问题
  12. SpringBoot整合mybatis 配置文件备份
  13. scanf()接受不同类型的参数的一个例子
  14. win10安装python27_《win10python27安装教程》 win10怎么安装python
  15. 同济大学Python程序设计基础 实验二:数据表示和处理
  16. 《空间分析》——思维导图
  17. 8.PPP拨号 获取ip地址
  18. 图像处理用什么神经网络,神经网络图像处理
  19. Centos7英文操作环境下的中文输入
  20. 基于CC2530设计的自动晾衣杆

热门文章

  1. Ubuntu 设置合上笔记本盖子不休眠的方法
  2. Android实现朋友圈的评论和回复
  3. 苹果安卓APP下载地址合并为一个二维码
  4. openfiler修改ip的命令_openfiler模拟ISCSI设备的配置
  5. gtx1060+linux+双显卡,ubuntu14.04+GTX1060 重新安装显卡驱动
  6. 中文停用词表整理(1893个)
  7. python古诗代码案例_用python实现古诗词横板竖版显示 【二维列表的使用】
  8. 利用ArcGIS创建注记层制作方法及注意事项
  9. 电路设计_自恢复保险丝参数说明
  10. tableau无法建立连接_外部服务连接疑难解答 - Tableau