Android 获取应用的流量值

手中一个项目要获取到当前应用的流量值,Android 2.2和之后的api中有一个trafficstats类,使用该类就能获取应用的流量信息的,由于我们的项目是要向下兼容到1.5
所以就悲剧了,只能自己去实现该方法了,后查找资料发现应用的流量信息是存放在/proc/uid_stat/uid(uid为进程的UID)目录下,在该目录下有两个文件tcp_snd(发送字

节数)和tcp_rcv(接收字节数)这样需要做的就简单了,只要读取本地文件就搞定了,

public static long getTCP_RCV(int uid){

 File file1 ;

FileInputStream in;

file1 = new File("/proc/uid_stat/"+uid+"/tcp_rcv");

if(!file1.exists()){

return 0;

}

try {

in = new FileInputStream(file1);

StringBuffer sb = new StringBuffer();

 

int i=0;

byte[] s = new byte[1024*4];

 

while((i=in.read(s))!=-1){

 

sb.append(new String(s,0,i));

}

return Long.parseLong(sb.toString());

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return 0; 

  }


获取发送的字节数和这个就一样了,不在赘述。获取当前应用的UID 也比较简单了 直接int uid = android.os.Process.myUid();就搞定了。问题也随之而来了,获取当前应用的流量数据,肯定是要在当前应用退出的时候调用该方法了,在什么位置呢,本来想在application继承类的onTerminate方法中调用该方法,后来发现程序大多数时候根本没有执行到该方法。该方法是在仿真环境中使用的http://developer.android.com/reference/android/app/Application.html咋办呢,只能退一步了,在每个activity的onResume()和onPause()方法中调用(两个数据坐差),拿到数据后就保存(保存时和之前activity的保存值相加)下来,下次程序启动的时候在上传。就先这样实现吧,有好的解决方法以后再改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值