android 手机流量的读取

 

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*/

 

 

 

  }

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值