Android(安卓)学习笔记之二 Netspeed
16lz
2021-01-25
今天看项目源码发现获取Android网速有问题,就此改了一下,做个笔记留给自己看。
下面代码放在工具类里:
[java] view plain copy
- publicstaticlonggetNetworkSpeed(Contextcontext){
- ProcessBuildercmd;
- longreadBytes=0;
- BufferedReaderbufferReader=null;
- try{
- String[]args={"/system/bin/cat","/proc/net/dev"};
- cmd=newProcessBuilder(args);
- Processprocess=cmd.start();
- bufferReader=newBufferedReader(newInputStreamReader(process.getInputStream()));
- Stringline;
- while((line=bufferReader.readLine())!=null){
- if(line.contains("wlan0")&&isWiFiNetworkAvailable(context)){
- String[]delim=line.split(":");
- if(delim.length>=2){
- Stringvalues=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){
- Stringvalues=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(Exceptionex){
- ex.printStackTrace();
- }finally{
- if(bufferReader!=null){
- try{
- bufferReader.close();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- }
- returnreadBytes;
- }
- //处理字符串数据的
- privatestaticStringnSpace2one(Strings){
- StringregEx="['']+";//一个或多个空格
- Patternp=Pattern.compile(regEx);
- Matcherm=p.matcher(s);
- Stringret=m.replaceAll(",").trim();
- returnret;
- }
- publicstaticbooleanisWiFiNetworkAvailable(Contextcontext){
- booleannetSataus=false;
- ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfonetinfo=cm.getActiveNetworkInfo();
- if(netinfo!=null&&netinfo.getType()==ConnectivityManager.TYPE_WIFI){
- netSataus=netinfo.isAvailable();
- }
- returnnetSataus;
- }
- publicstaticbooleanisNetworkAvailable(Contextcontext){
- booleannetSataus=false;
- ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
- NetworkInfonetinfo=cm.getActiveNetworkInfo();
- if(netinfo!=null){
- netSataus=netinfo.isAvailable();
- }
- returnnetSataus;
- }
在Activity或fragment中调用上述工具类的方法:
[java] view plain copy
- privatelonglastTimeSpeed=0;
- privateTextViewshowNetWorkSpeed;
- privateHandlermHandler=newHandler();
- privateRunnableupdateCurrentNetWorkSpeed=newRunnable(){
- publicvoidrun(){
- longgetDataFlow=Utility.getNetworkSpeed(xxxActivity.this)/1024;//xxxActivity是你当前的Activity
- if(lastTimeSpeed==0){
- lastTimeSpeed=getDataFlow;
- }
- longshowSpeed=getDataFlow-lastTimeSpeed;
- lastTimeSpeed=getDataFlow;
- showNetWorkSpeed.setText(showSpeed+"k/s");
- mHandler.postDelayed(updateCurrentNetWorkSpeed,1000);
- }
- }
其实这里的getNetworkSpeed方法返回的并非当前网速,而是流量总值~~~
获取流量的方法并不是我写的。欢迎各位大神指出问题,指导下哈~~
更多相关文章
- Android中不用Service跨Avtivity仍然可以播放音乐的一个简单方法
- Android错误解决方法之:Debug certificate expired on
- Android(安卓)dispatchTouchEvent
- 利用Handler更新Android(安卓)UI的另一种方法
- android中常用的弹出提示框
- Android(安卓)Activity加载Fragment的一般简易方法
- Android中发送短信等普通方法
- Android子线程更新View的探索
- Android下实现tab页个人比较推崇的方法