アプリケーションネットワークの使用状況の統計情報を表示するAndroidアプリを開発しました。 Android 6以降を搭載する端末では、TrafficStats APIsをAndroidバージョン6より前の端末で、NetworkStatsManager APIsからAndroid 6以降を搭載する端末で使用しています。TrafficStats/NetworkStatsManager APIの奇妙な結果
アプリのリストを表示するアプリは、ネットワークの使用状況でバイト単位でソートされています。
ネットワークの使用量がまったく同じ値を持つ複数のシステムアプリが常に存在することに気づきました(たとえば、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を持っています。 –