流量统计getUidRxPackets函数的问题

景语 2014-01-22 09:24:13
PackageManager pm = getPackageManager();
// 获取每个包内的androidmanifest.xml信息,它的权限等等
List<PackageInfo> pinfos = pm
.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES
| PackageManager.GET_PERMISSIONS);
// 遍历处理每个应用包信息
for (PackageInfo info : pinfos) {
// 请求每个程序包对应的androidManifest.xml里面的权限
String[] premissions = info.requestedPermissions;
if (premissions != null && premissions.length > 0) {
// 找出需要网络服务的应用程序
for (String premission : premissions) {
if ("android.permission.INTERNET".equals(premission)) {
// 获取该应用程序在操作系统内的进程id
int uId = info.applicationInfo.uid;
// 获取该应用开机以来下载的总字节数
long rx = TrafficStats.getUidRxBytes(uId);
// 获取该应用开机以来上传的总字节数
long tx = TrafficStats.getUidTxBytes(uId);
// 获取该应用开机以来下载的总包数
long prx = TrafficStats.getUidRxPackets(uId);
// 获取该应用开机以来上传的总包数
long ptx = TrafficStats.getUidTxPackets(uId);



核心代码如上。
在手机上跑,为什么打印出来prx和ptx老是为-1?
...全文
195 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
景语 2014-01-22
  • 打赏
  • 举报
回复
引用 1 楼 u010457784 的回复:
这个可以将所有的消耗流量的app都统计出来??? 楼主是否知道如何限制这些app的上网权限呢??
可以统计,但是没有区分WIFI和2G/3G 限制肯定也可以做到的,你可以查查开发文档
景语 2014-01-22
  • 打赏
  • 举报
回复
看了API文档,自答一记:
引用
public static final int UNSUPPORTED Added in API level 8 The return value to indicate that the device does not support the statistic. Constant Value: -1 (0xffffffff)
应该是设备不支持包数的统计,但我手机是4.2.1啊,怎么不支持呢,郁闷……
阿布1991 2014-01-22
  • 打赏
  • 举报
回复
这个可以将所有的消耗流量的app都统计出来??? 楼主是否知道如何限制这些app的上网权限呢??

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧