Android 学习笔记之二 Netspeed
2016-04-21 22:37
477 查看
今天看项目源码发现获取Android网速有问题,就此改了一下,做个笔记留给自己看。
下面代码放在工具类里:
[java] view
plain copy
public static long getNetworkSpeed(Context context) {
ProcessBuilder cmd;
long readBytes = 0;
BufferedReader bufferReader = null;
try {
String[] args = { "/system/bin/cat", "/proc/net/dev" };
cmd = new ProcessBuilder(args);
Process process = cmd.start();
bufferReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = bufferReader.readLine()) != null) {
if (line.contains("wlan0") && isWiFiNetworkAvailable(context)) {
String[] delim = line.split(":");
if (delim.length >= 2) {
String values = delim[1].trim();
values = nSpace2one(values);
String[] numbers = values.split(",");// 提取数据
readBytes = Long.parseLong(numbers[0].trim());
readBytes += Long.parseLong(numbers[8].trim());
break;
}
}
if (line.contains("eth0") && isEthernetNetworkAvailable(context)) {
String[] delim = line.split(":");
if (delim.length >= 2) {
String values = delim[1].trim();
values = nSpace2one(values);
String[] numbers = values.split(",");
readBytes = Long.parseLong(numbers[0].trim());
readBytes += Long.parseLong(numbers[8].trim());
break;
}
}
}
bufferReader.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (bufferReader != null) {
try {
bufferReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return readBytes;
}
//处理字符串数据的
private static String nSpace2one(String s) {
String regEx = "[' ']+"; // 一个或多个空格
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(s);
String ret = m.replaceAll(",").trim();
return ret;
}
public static boolean isWiFiNetworkAvailable(Context context) {
boolean netSataus = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netinfo = cm.getActiveNetworkInfo();
if (netinfo != null && netinfo.getType() == ConnectivityManager.TYPE_WIFI) {
netSataus = netinfo.isAvailable();
}
return netSataus;
}
public static boolean isNetworkAvailable(Context context) {
boolean netSataus = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netinfo = cm.getActiveNetworkInfo();
if (netinfo != null) {
netSataus = netinfo.isAvailable();
}
return netSataus;
}
在Activity或fragment中调用上述工具类的方法:
[java] view
plain copy
private long lastTimeSpeed = 0;
private TextView showNetWorkSpeed;
private Handler mHandler = new Handler();
private Runnable updateCurrentNetWorkSpeed = new Runnable() {
public void run() {
long getDataFlow = Utility.getNetworkSpeed(xxxActivity.this) / 1024;//xxxActivity是你当前的Activity
if(lastTimeSpeed==0){
lastTimeSpeed = getDataFlow;
}
long showSpeed = getDataFlow - lastTimeSpeed;
lastTimeSpeed = getDataFlow;
showNetWorkSpeed.setText(showSpeed+"k/s");
mHandler.postDelayed(updateCurrentNetWorkSpeed, 1000);
}
}
其实这里的getNetworkSpeed方法返回的并非当前网速,而是流量总值~~~
获取流量的方法并不是我写的。欢迎各位大神指出问题,指导下哈~~
下面代码放在工具类里:
[java] view
plain copy
public static long getNetworkSpeed(Context context) {
ProcessBuilder cmd;
long readBytes = 0;
BufferedReader bufferReader = null;
try {
String[] args = { "/system/bin/cat", "/proc/net/dev" };
cmd = new ProcessBuilder(args);
Process process = cmd.start();
bufferReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = bufferReader.readLine()) != null) {
if (line.contains("wlan0") && isWiFiNetworkAvailable(context)) {
String[] delim = line.split(":");
if (delim.length >= 2) {
String values = delim[1].trim();
values = nSpace2one(values);
String[] numbers = values.split(",");// 提取数据
readBytes = Long.parseLong(numbers[0].trim());
readBytes += Long.parseLong(numbers[8].trim());
break;
}
}
if (line.contains("eth0") && isEthernetNetworkAvailable(context)) {
String[] delim = line.split(":");
if (delim.length >= 2) {
String values = delim[1].trim();
values = nSpace2one(values);
String[] numbers = values.split(",");
readBytes = Long.parseLong(numbers[0].trim());
readBytes += Long.parseLong(numbers[8].trim());
break;
}
}
}
bufferReader.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (bufferReader != null) {
try {
bufferReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return readBytes;
}
//处理字符串数据的
private static String nSpace2one(String s) {
String regEx = "[' ']+"; // 一个或多个空格
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(s);
String ret = m.replaceAll(",").trim();
return ret;
}
public static boolean isWiFiNetworkAvailable(Context context) {
boolean netSataus = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netinfo = cm.getActiveNetworkInfo();
if (netinfo != null && netinfo.getType() == ConnectivityManager.TYPE_WIFI) {
netSataus = netinfo.isAvailable();
}
return netSataus;
}
public static boolean isNetworkAvailable(Context context) {
boolean netSataus = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netinfo = cm.getActiveNetworkInfo();
if (netinfo != null) {
netSataus = netinfo.isAvailable();
}
return netSataus;
}
在Activity或fragment中调用上述工具类的方法:
[java] view
plain copy
private long lastTimeSpeed = 0;
private TextView showNetWorkSpeed;
private Handler mHandler = new Handler();
private Runnable updateCurrentNetWorkSpeed = new Runnable() {
public void run() {
long getDataFlow = Utility.getNetworkSpeed(xxxActivity.this) / 1024;//xxxActivity是你当前的Activity
if(lastTimeSpeed==0){
lastTimeSpeed = getDataFlow;
}
long showSpeed = getDataFlow - lastTimeSpeed;
lastTimeSpeed = getDataFlow;
showNetWorkSpeed.setText(showSpeed+"k/s");
mHandler.postDelayed(updateCurrentNetWorkSpeed, 1000);
}
}
其实这里的getNetworkSpeed方法返回的并非当前网速,而是流量总值~~~
获取流量的方法并不是我写的。欢迎各位大神指出问题,指导下哈~~
相关文章推荐
- Android 应用退到后台
- Android自定义控件:仿美团下拉菜单及相关代码优化
- Android属性动画实现TextView类似支付宝余额数字滚动
- android开发中常用的开源框架与好的项目
- Android Scroll分析
- android设计模式的使用之适配器模式
- Android简单的调用系统相机和相册
- 命令行创建Android应用,命令行生成签名文件,命令行查看签名信息,对APK包签名并编译运行
- Android ADB 端口占用问题解决方案
- Android 学习笔记之一 Status Bar Notifications
- Android Scroll详解(三):Android 绘制过程详解
- android tv开发adb 命令
- android 更加复杂的小鱼游
- android 小鱼在水中游
- Android实现图片自动轮播并且支持手势左右无限滑动
- Fragment使用方法总结
- 最详细的 Android Toolbar 开发实践总结
- Android事件分发机制
- Android学习笔记--Intent
- Java(Android)线程池