7

모든 앱의 네트워크 트래픽 통계를 얻으려고합니다. 방금 장치에있는 모든 응용 프로그램의 전체 네트워크 트래픽을 인쇄합니다. 코드는 안드로이드 4.4 및 5.1 장치에서 잘 작동하지만 안드로이드 6.0 장치에서는 항상 모든 응용 프로그램에 대해 0을 반환합니다. 누구나 이것이 안드로이드 6.0 기기에서 왜 일어 났는지 말해 주실 수 있습니다.getUidTxBytes (int uid)는 android 6.0에서 항상 0을 반환합니다.

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); 
    } 
} 

은 여기 내 doc에 따르면 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> 

답변

1

:

는 N이 만 호출 UID에 대한 트래픽 통계를보고합니다 시작. 프라이버시를 이유로 다른 모든 UID에 대해 UNSUPPORTED를 반환합니다. 다른 UID에 속한 기록 네트워크 통계에 액세스하려면 NetworkStatsManager를 사용하십시오.

전에 UID 트래픽 4.3을 안드로이드 :

+0

정말 고마워요. –

+0

질문은 android 6 (M)에 관한 것입니다 ... 제한이 없어야합니다. 나는 안드로이드 6에이 정보를 검색하는 장치가 있습니다.이 장치는 제한이 없으며 안드로이드 7에 영향을줍니다. –

-1

시도는 현재 응용 프로그램의 데이터를 얻을 의외로 당신은 당신이 실제로 자신의 응용 프로그램에 대한 네트워크 정보를 얻을 수 있음을 알 수 있습니다, 그 이유는 아래에 적혀있다 통계는 TCP 및 UDP에 사용할 수 있었으며 바이트로는 API를 포함하고 보내고받은 패킷은 &입니다. 이 데이터는/proc/uid_stat/[pid]/* 파일에서 추출되었습니다.

Android 4.3의 경우 개발자는 Linux의 netfilter 커널 모듈의 일부인 xt_qtaguid UID 통계를 사용하여 더 안전하고 안전한 API로 전환하기로 결정했습니다. 이 API (procfs)는 프로세스 UID를 기반으로 액세스를 허용하므로 Android == 4.3의 TrafficStats API에 액세스하려고 시도 할 때 자체가 아닌 UID에 대해 0 정보를 얻게됩니다.

그래서이 문제를 처리하는 현재의 방법이 될 수있다 : 시스템 수준의 권한을 사용하여 포함 :

1) NetworkStatsManager. 2) 수동으로/proc/uid_stat 파일 읽기/

나중에 옵션에서 부팅 할 때 데이터가 지워진다는 점에 유의하십시오.

감사합니다.