android手机流量信息系统是LINUX内核 记录在/proc/self/net/dev文件里面 我们可以看看dev文件的格式 Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp. D:/Program Files/Java/sdk/android-sdk-windows/tools>adb shell # cd proc cd proc # cd net cd net # cat dev cat dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packe ts errs drop fifo colls carrier compressed lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 eth0: 7069733 86239 0 0 0 0 0 0 12512463 741 79 0 0 0 0 0 0 tunl0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 gre0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 # 我们要获取流量可以通过这个文件进行读取 我读取的源代码如下 package zy.dnh; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.util.Calendar; import org.apache.http.util.EncodingUtils; import android.app.Service; import android.content.Intent; import android.os.Handler; import android.os.IBinder; import android.widget.Toast; /* � */ public class mService1 extends Service { private Handler objHandler = new Handler(); private int intCounter=0; private int mHour; private int mMinute; private int mYear; private int mMonth; private int mDay; private String mdate; final public String DEV_FILE = "/proc/self/net/dev";//系统流量文件 String[] ethdata={"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"}; String[] gprsdata={"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"}; String[] wifidata={"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"}; String data="0,0,0,0,0,0,0,0,0,0,0,0";//对应on.txt里面的格式 final String ETHLINE=" eth0";//eth是以太网信息 tiwlan0 是 Wifi rmnet0 是 GPRS final String GPRSLINE="rmnet0"; final String WIFILINE="tiwlan0"; final String TEXT_ENCODING = "UTF-8"; final public String ONPATH = "/data/data/zy.dnh/on.txt"; final public String LOGPATH = "/data/data/zy.dnh/log.txt"; private Runnable mTasks = new Runnable() { public void run()//运行该服务执行此函数 { refresh(); intCounter++; //DisplayToast("Counter:"+Integer.toString(intCounter)); objHandler.postDelayed(mTasks, 3000);//每3000毫秒执行一次 } }; @Override public void onStart(Intent intent, int startId) { // TODO Auto-generated method stub objHandler.postDelayed(mTasks, 0); super.onStart(intent, startId); } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onDestroy() { // TODO Auto-generated method stub /* */ objHandler.removeCallbacks(mTasks); super.onDestroy(); } public void DisplayToast(String str) { Toast.makeText(this,str,Toast.LENGTH_SHORT).show(); } public void readdev() { FileReader fstream = null; try { fstream = new FileReader(DEV_FILE); } catch (FileNotFoundException e) { DisplayToast("Could not read " + DEV_FILE); } BufferedReader in = new BufferedReader(fstream, 500); String line; String[] segs; String[] netdata; int count=0; int k; int j; try { while ((line = in.readLine()) != null) { segs = line.trim().split(":"); if(line.startsWith(ETHLINE)) { netdata=segs[1].trim().split(" "); for(k=0,j=0;k<netdata.length;k++) { if(netdata[k].length()>0) { ethdata[j]=netdata[k]; j++; } } } else if(line.startsWith(GPRSLINE)) { netdata=segs[1].trim().split(" "); for(k=0,j=0;k<netdata.length;k++) { if(netdata[k].length()>0) { gprsdata[j]=netdata[k]; j++; } } } else if(line.startsWith(WIFILINE)) { netdata=segs[1].trim().split(" "); for(k=0,j=0;k<netdata.length;k++) { if(netdata[k].length()>0) { wifidata[j]=netdata[k]; j++; } } } count++; } fstream.close(); } catch (IOException e) { DisplayToast(e.toString()); } } public String getinfo(String path) { File file; String str=""; FileInputStream in; try{ //打开文件file的InputStream file = new File(path); in = new FileInputStream(file); //将文件内容全部读入到byte数组 int length = (int)file.length(); byte[] temp = new byte[length]; in.read(temp, 0, length); //将byte数组用UTF-8编码并存入display字符串中 str = EncodingUtils.getString(temp,TEXT_ENCODING); //关闭文件file的InputStream in.close(); } catch (IOException e) { DisplayToast(e.toString()); } return str; } public void writefile(String str,String path ) { File file; FileOutputStream out; try { //创建文件 file = new File(path); file.createNewFile(); //打开文件file的OutputStream out = new FileOutputStream(file); String infoToWrite = str; //将字符串转换成byte数组写入文件 out.write(infoToWrite.getBytes()); //关闭文件file的OutputStream out.close(); } catch (IOException e) { //将出错信息打印到Logcat DisplayToast(e.toString()); } } public void refresh() { readdev();//读取本次开机之后直到当前系统的总流量 data=ethdata[0]+","+ethdata[1]+","+ethdata[8]+","+ethdata[9]+"," +gprsdata[0]+","+gprsdata[1]+","+gprsdata[8]+","+gprsdata[9]+"," +wifidata[0]+","+wifidata[1]+","+wifidata[8]+","+wifidata[9]; String onstr=getinfo(ONPATH);//读取on.txt记录到onstr里 String ondata[]=onstr.split(",");//将onstr各项分离 放到ondata里 //计算增量 int [] delta=new int [12]; delta[0]=Integer.parseInt(ethdata[0])-Integer.parseInt(ondata[0]); delta[1]=Integer.parseInt(ethdata[1])-Integer.parseInt(ondata[1]); delta[2]=Integer.parseInt(ethdata[8])-Integer.parseInt(ondata[2]); delta[3]=Integer.parseInt(ethdata[9])-Integer.parseInt(ondata[3]); delta[4]=Integer.parseInt(gprsdata[0])-Integer.parseInt(ondata[4]); delta[5]=Integer.parseInt(gprsdata[1])-Integer.parseInt(ondata[5]); delta[6]=Integer.parseInt(gprsdata[8])-Integer.parseInt(ondata[6]); delta[7]=Integer.parseInt(gprsdata[9])-Integer.parseInt(ondata[7]); delta[8]=Integer.parseInt(wifidata[0])-Integer.parseInt(ondata[8]); delta[9]=Integer.parseInt(wifidata[1])-Integer.parseInt(ondata[9]); delta[10]=Integer.parseInt(wifidata[8])-Integer.parseInt(ondata[10]); delta[11]=Integer.parseInt(wifidata[9])-Integer.parseInt(ondata[11]); //读取log.txt //获取当前时间 final Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); //获取当前年份 mMonth = c.get(Calendar.MONTH)+1;//获取当前月份 mDay = c.get(Calendar.DAY_OF_MONTH);//获取当前月份的日期号码 mHour = c.get(Calendar.HOUR_OF_DAY);//获取当前的小时数 mMinute = c.get(Calendar.MINUTE);//获取当前的分钟数 mdate=mYear+"-"+mMonth+"-"+mDay; String text=getinfo(LOGPATH);//将log.txt的内容读到text字符串中 String [] line=text.split("/n"); String today=line[line.length-1];//获得今日已记录流量 String [] beToday=today.split(","); //检查文件最后一行是否为今天的流量记录信息 if(!beToday[0].equals(mdate))//如果文件只有一行,表明目前日志为空,将当前日期加入 //判断今日流量是否已经记录,如果今日流量没有记录 { text=text+mdate+",0,0,0,0,0,0,0,0,0,0,0,0/n"; writefile(text,LOGPATH); line=text.split("/n"); today=line[line.length-1];//获得今日已记录流量 beToday=today.split(","); } int i; //处理今日流量 int [] newTodaydata=new int [12];//表示今日流量 String newtoday=mdate; for(i=0;i<=11;i++) { newTodaydata[i]=Integer.parseInt(beToday[i+1])+delta[i]; newtoday=newtoday+","+newTodaydata[i]; } newtoday=newtoday+"/n"; String [] beTotal=line[0].split(","); int [] newTotaldata=new int [12];//表示总流量数值 //更新第一行 String newtotal="total"; for(i=0;i<=11;i++) { newTotaldata[i]=Integer.parseInt(beTotal[i+1])+delta[i];//总流量数值+delta[i]更新 newtotal=newtotal+","+newTotaldata[i]; } newtotal= newtotal+"/n"; //处理中间不变的部分 String before="";//before为之前的从第1行到昨天的流量记录 for(i=1;i<=line.length-2;i++) before=before+line[i]+"/n";//代表中间不变的部分 String newlog=newtotal+before+newtoday; writefile(data,ONPATH);//更新流量记录 writefile(newlog,LOGPATH);//更新log*/ } }

更多相关文章

  1. 【Android(安卓)应用开发】 Android(安卓)APK 反编译 混淆 反编
  2. 【Android】Android背景选择器selector用法汇总
  3. Android相关经验积累总结
  4. Android处理Bitmap的一些方法
  5. Android开机启动
  6. Android——4.2.2 文件系统文件夹分析
  7. android 软键盘 InputMethodManager
  8. 错误 'roundIcon' in package 'android'
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android(安卓)带图标的textview
  2. EditTextView 属性
  3. 相对布局 RelativeLayout 常用属性介绍
  4. Android伸手党系列之二:Android开发基础知
  5. 【边做项目边学Android】手机安全卫士05_
  6. android arm debug
  7. Android(安卓)融云SDK 集成
  8. 详解Android中的屏幕方向
  9. Android预定义样式
  10. 面向忙碌开发者的 Android