Я разрабатываю приложение для Android, которое должно отображать статистику использования сети приложений. Я использую TrafficStats APIs на устройствах под управлением Android версий до 6 и NetworkStatsManager APIs на устройствах под управлением Android 6 и новее.Странные результаты TrafficStats/NetworkStatsManager APIs
Приложение, отображающее список приложений, отсортированных по сети в байтах.
Я заметил, что всегда есть несколько системных приложений, которые имеют точно такое же значение использования сети (например, если у одного есть 31317179 rx байт, тогда у другого будет точно такой же 31317179). Их Pakage имен:
- com.google.android.syncadapters.contacts
- com.google.android.gms
- com.google.android.gsf
- com.google.android.gsf .login
, но может варьироваться в зависимости от версии устройства/os. Мой вопрос, почему это происходит? Это ошибка в 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;
}
Они могут использовать 'android: sharedUserId' и иметь одинаковые' uid'. – CommonsWare
Спасибо! Я проверил, и это правильный ответ. У них действительно такой же uid. –