我开发的Android应用程序应该显示每个应用程序的网络使用统计数据。我在运行Android 6的设备上使用TrafficStats API,在运行Android6及更高版本的设备上使用NetworkStatsManager API。
我的应用程序显示按网络使用量排序的应用程序列表(以字节为单位)。
我注意到,总有几个系统应用程序具有完全相同的网络使用率值(例如,如果一个应用程序有31317179 rx字节,那么其他应用程序将拥有完全相同的31317179)。他们的皮卡名是:
但可能会因设备/操作系统版本而有所不同。我的问题是为什么会这样?这是API中的错误吗?如果这些应用程序以某种方式共享相同的流量--有什么方法可以获得哪些进程共享了通信量,以便对它们进行分组?
我当前用于TrafficStats的代码如下:
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;
}发布于 2017-01-21 22:46:29
TrafficStats通过UID报告通信量。对于大多数应用程序,每个UID都有一个应用程序。对于Googly应用程序,以及设备制造商/定制ROM开发人员提供的系统应用程序,android:sharedUserId提供的每个UID可能有几个应用程序。我不知道有什么方法可以区分UID中的数据包流量。但是,当N个应用程序具有相同的UID时,您问题中的代码将导致N个记录具有相同的流量。
https://stackoverflow.com/questions/41784961
复制相似问题