首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流量统计/NetworkStatsManager的奇怪结果

流量统计/NetworkStatsManager的奇怪结果
EN

Stack Overflow用户
提问于 2017-01-21 21:52:34
回答 1查看 1.4K关注 0票数 0

我开发的Android应用程序应该显示每个应用程序的网络使用统计数据。我在运行Android 6的设备上使用TrafficStats API,在运行Android6及更高版本的设备上使用NetworkStatsManager API

我的应用程序显示按网络使用量排序的应用程序列表(以字节为单位)。

我注意到,总有几个系统应用程序具有完全相同的网络使用率值(例如,如果一个应用程序有31317179 rx字节,那么其他应用程序将拥有完全相同的31317179)。他们的皮卡名是:

  • com.google.android.syncadapters.contacts
  • com.google.android.gms
  • com.google.android.gsf
  • com.google.android.gsf.login

但可能会因设备/操作系统版本而有所不同。我的问题是为什么会这样?这是API中的错误吗?如果这些应用程序以某种方式共享相同的流量--有什么方法可以获得哪些进程共享了通信量,以便对它们进行分组?

我当前用于TrafficStats的代码如下:

代码语言:javascript
复制
private List<TrafficInfo> getTrafficInfosByTrafficStatsAPI(PackageManager pm) {
    List<TrafficInfo> trafficlnfos = new ArrayList<>();
    List<PackageInfo> packinfos = pm.getInstalledPackages(PackageManager.GET_PERMISSIONS);
    for (PackageInfo info : packinfos) {
        String[] premissions = info.requestedPermissions;
        if (premissions != null && premissions.length > 0) {
            for (String premission : premissions) {
                if ("android.permission.INTERNET".equals(premission)) {
                    int uid = info.applicationInfo.uid;
                    long total = TrafficStats.getUidRxBytes(uid) + TrafficStats.getUidTxBytes(uid);
                    if (total > 0) {
                        TrafficInfo trafficInfo = new TrafficInfo();
                        trafficInfo.setName(getPackageName(pm, info));
                        trafficInfo.setPackageName(info.packageName);
                        trafficInfo.setTraffic(total);
                        trafficlnfos.add(trafficInfo);
                    }
                }
            }
        }
    }

    Collections.sort(trafficlnfos);
    return trafficlnfos;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-21 22:46:29

TrafficStats通过UID报告通信量。对于大多数应用程序,每个UID都有一个应用程序。对于Googly应用程序,以及设备制造商/定制ROM开发人员提供的系统应用程序,android:sharedUserId提供的每个UID可能有几个应用程序。我不知道有什么方法可以区分UID中的数据包流量。但是,当N个应用程序具有相同的UID时,您问题中的代码将导致N个记录具有相同的流量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41784961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档