2016-12-31 27 views
7

Tüm uygulamaların ağ trafik istatistiklerini almaya çalışıyorum. Cihazımdaki her uygulamanın toplam ağ trafiğini yazdırıyorum. Kod android 4.4 ve 5.1 cihazlarda iyi çalışıyor ancak android 6.0 cihazında her zaman tüm uygulamalar için 0'a dönüyor. Herkes bana bunun neden android 6.0 cihazlarda olduğunu söyler.getUidTxBytes (int uid) her zaman android 6.0 0 döndürür

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    for(ApplicationInfo app : getPackageManager().getInstalledApplications(0)){ 
     long tx = TrafficStats.getUidTxBytes(app.uid); 
     long rx = TrafficStats.getUidRxBytes(app.uid); 
     long total = tx + rx; 
     Log.e("total data of ", app.packageName + " = " + total); 
    } 
} 

İşte benim doc göre AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mts.trafficstatsdemo"> 

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

cevap

1

:

N bunun sadece çağıran UID trafik istatistiklerini bildirir başlayarak. Gizlilik, nedenleriyle diğer tüm UID'ler için UNSUPPORTED dönecektir. Diğer UID'lerine ait geçmiş ağ istatistiklerine erişmek için NetworkStatsManager'ı kullanın.

önce UID trafik Android 4.3:

+0

Çok teşekkür ederim. –

+0

Soru, android 6 (M) hakkında ... Hiçbir kısıtlama olmamalıdır. Ben bu bilgi almak için iyi bir android 6 bazı cihazlar var ve değil, ama bu cevap başına, kısıtlama android 7 etkilemelidir. –

-1

deneyin geçerli uygulama verilerini almak için ve şaşırtıcı sen aslında kendi uygulama için ağ ayrıntıları alabilirsiniz göreceksiniz, sebebi aşağıda belirtilmiştir TCP ve UDP için istatistikler mevcuttu ve gönderilen ve alınan baytlar ve paketler & için API dahil edildi. Bu veriler/proc/uid_stat/[pid]/* dosyalarından çıkarıldı.

Android 4.3'te, geliştiriciler Linux'ta netfilter çekirdek modülünün bir parçası olan xt_qtaguid UID istatistiklerini kullanarak daha iyi ve daha güvenli bir API'ye geçmeye karar verdiler. Bu API (procfs), süreç UID'sine dayalı olarak erişime izin verir ve bu nedenle Android => 4.3'teki TrafficStats API'sine erişmeye çalıştığınızda, kendi UID'si için sıfır bilgi alırsınız.

Yani konuyu ele mevcut yol olabilir: Bu sistem düzeyi izni kullanarak içeren :

1) NetworkStatsManager. 2) Dosyaları oku/proc/uid_stat/

Daha sonraki seçenekte verilerin önyüklemede silineceğini unutmayın.

Teşekkürler.

İlgili konular