reference : http://blog.csdn.net/zhangyong7112/article/details/54574214

最近一个关于流量的项目在Android7.0系统的手机上运行,一直获取不到流量的使用数据,查看源码然后发现TrafficStats.getUidRxBytes(uid)和TrafficStats.getUidTxBytes(uid)一直都是返回的-1,

// 获取某个网络UID接收和发送字节的总和
long total = TrafficStats.getUidRxBytes(uid) + TrafficStats.getUidTxBytes(uid);

这就纳闷了!!!然后多方查找资料,问了公司的大神,给我说可以在“/proc/uid_stat/"文件夹中读取数据。后来总算是出来了。。。 不说了 贴代码

if (total == 0 || (TrafficStats.getUidRxBytes(uid) == -1) && (TrafficStats.getUidTxBytes(uid) == -1)) {
total = getTotalBytesManual(uid);
}
/**
* 通过uid查询文件夹中的数据
* @param localUid
* @return
*/
private Long getTotalBytesManual(int localUid) {
// Log.e("BytesManual*****", "localUid:" + localUid);
File dir = new File("/proc/uid_stat/");
String[] children = dir.list();
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < children.length; i++) {
stringBuffer.append(children[i]);
stringBuffer.append(" ");
}
// Log.e("children*****", children.length + "");
// Log.e("children22*****", stringBuffer.toString());
if (!Arrays.asList(children).contains(String.valueOf(localUid))) {
return 0L;
}
File uidFileDir = new File("/proc/uid_stat/" + String.valueOf(localUid));
File uidActualFileReceived = new File(uidFileDir, "tcp_rcv");
File uidActualFileSent = new File(uidFileDir, "tcp_snd");
String textReceived = "0";
String textSent = "0";
try {
BufferedReader brReceived = new BufferedReader(new FileReader(uidActualFileReceived));
BufferedReader brSent = new BufferedReader(new FileReader(uidActualFileSent));
String receivedLine;
String sentLine; if ((receivedLine = brReceived.readLine()) != null) {
textReceived = receivedLine;
// Log.e("receivedLine*****", "receivedLine:" + receivedLine);
}
if ((sentLine = brSent.readLine()) != null) {
textSent = sentLine;
// Log.e("sentLine*****", "sentLine:" + sentLine);
}
} catch (IOException e) {
e.printStackTrace();
// Log.e("IOException*****", e.toString());
}
// Log.e("BytesManualEnd*****", "localUid:" + localUid);
return Long.valueOf(textReceived).longValue() + Long.valueOf(textSent).longValue();
}

[Android Pro] Android7.0系统 关于Android获取流量计数TrafficStats.getUidRxBytes(uid)和TrafficStats.getUidTxBytes(uid)返回-1解决方案的更多相关文章

  1. 【亲测】appium_v1.4.16版本自动化适配android7.0系统

    要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.a ...

  2. appium_server_v1.4.16版本不适配android7.0系统,运行报错“Attempt to re-install io.appium.settings without first uninstalling”

    要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.a ...

  3. appium_v1.4.16版本自动化适配android7.0系统

    https://www.cnblogs.com/imlvbu/p/7127940.html 要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAI ...

  4. android开发(0):android studio的下载安装与简单使用 | sdk的安装与编译运行

    android studio,简称AS,是集成开发环境,所谓集成,就是集编辑.编译.调试.打包等于一体.简单来说,通过AS,就可以开发出在android系统上运行的APP. 我使用的是macos系统. ...

  5. appium不支持Android7.0系统设备解决办法

    1. 找到appium的安装目录下的adb.js文件. 2. 打开adb.js,手动修改该文件下的内容: Adb.prototype.getPIDsByName=function(name,cb){ ...

  6. Android7.0新特性,及Android N适配

    新特性部分 Android 7.0 Nougat 提供新功能以提升性能.生产效率和安全性,主要新增了下面的新特性和优化: 一.新的Notification Android N 添加了很多新的notif ...

  7. Android 7.0系统代码调用安装apk时报错FileUriExposedException完美解决

    项目更新遇到问题   Android项目开发中经常遇到下载更新的需求,以前调用系统安装器执行安装操作代码如下: Intent intent = new Intent(); intent.setActi ...

  8. Android版本4.0~7.0

    Android 4.0 Ice Cream Sandwich(冰激凌三明治):2011年10月19日发布 版本主要更新如下:全新的UI:全新的Chrome Lite浏览器:截图功能:更强大的图片编辑功 ...

  9. Android开发系列之系统源码目录

    相信大家对于Google给出的那副经典Android架构图非常的熟悉,从下往上依次是Linux内核层(主要是负责硬件管理调度),HAL层(主要是硬件抽象层),libs层+Runtime,Framewo ...

随机推荐

  1. centos6下mysql的主从复制的配置

    2015年9月17日 23:00:36 update 想要好好了解mysql复制,还是去看看<高性能MySQL>(第三版)好了,上面说的比较详细. =========== 在本地用virt ...

  2. [Linux][Ubuntu18.04.1] nginx+php+MySQL环境搭建

    说在前面 今天在腾讯云的CVM服务器搭建了一下环境[主机:标准型S2,Unbuntu18.04的LST版本] 采用了nginx服务器(Nginx 静态处理性能比 Apache高3倍以上,不过apach ...

  3. day1 python简介和入门

    Linux的yum依赖自带Python,为防止错误,此处更新其实就是再安装一个Python: 安装Python 1.下载安装包     https://www.python.org/downloads ...

  4. spring_150807_hibernate_transaction_annotation

    实体类: package com.spring.model; import javax.persistence.Entity; import javax.persistence.Id; import ...

  5. asp.net传多个值到其它页面的方法

    网站开发中,在页面之间的跳转,经常会用到传值,其中可能会传递多个值. 一.CommadArgument传多个值到其他页面. 像Gridview dataList repeater等数据绑定控件中,可以 ...

  6. python爬虫实战(六)--------新浪微博(爬取微博帐号所发内容,不爬取历史内容)

    相关代码已经修改调试成功----2017-4-13 详情代码请移步我的github:https://github.com/pujinxiao/sina_spider 一.说明 1.目标网址:新浪微博 ...

  7. pfring破解DNA限制

    最近因工作需要,对pf_ring进行反调试.官方下载的pf_ring转发数据包的过程中,对程序做了五分钟的限制.那么如何突破此限制.此篇博客记录一下过程,已备后用. 下载源码后进行编译,此处我们利用源 ...

  8. Mac os 下的文件权限管理

    Mac os 下的文件权限管理 命令 ls -l -A 结果 -rw-r--r-- 1 user admin 2326156 4 12 15:24 adb 横线代表空许可.r代表只读,w代表写,x代表 ...

  9. dp 神奇的口袋

    有一个神奇的口袋,总的容积是40,用这个口袋可以变出一 些物品,这些物品的总体积必须是40.  John现在有n(1≤n ≤ 20)个想要得到的物品,每个物品 的体积分别是a1,a2--an.Joh ...

  10. Selenium模拟登陆简书

    from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.c ...