7

すべてのアプリケーションのネットワークトラフィック統計情報を取得しようとしています。私はデバイス内のすべてのアプリケーションの合計ネットワークトラフィックを表示します。コードは、アンドロイド4.4および5.1デバイスで正常に動作していますが、アンドロイド6.0デバイスでは、すべてのアプリケーションで常に0が返されます。誰もがなぜこれがアンドロイド6.0デバイスで起こったのか教えてください。ここでgetUidTxBytes(int uid)は、アンドロイド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

です:

これが唯一の呼び出し UIDのためのトラフィック統計情報を報告しますNで開始します。プライバシー の理由で他のすべてのUIDに対してUNSUPPORTEDを返します。他の UIDに属する履歴ネットワーク統計にアクセスするには、NetworkStatsManagerを使用します。

+0

ありがとうございました。 –

+0

問題はアンドロイド6(M)についてです...制限はありません。私はアンドロイド6にいくつかのデバイスを持っていますが、この情報はうまく検索できますが、特定のものはありませんが、この回答によれば、アンドロイド7には制限があります。 –

-1

現在のアプリケーションのデータを取得すると驚くほど、あなたが実際に自分のアプリのためのネットワークの詳細は、その理由を以下に記載されて得ることができることに気づくだろう試してみてください。

前のAndroid 4.3へのUIDトラフィック統計情報は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の情報がゼロになります。

だから、問題を処理する現在の方法が使用できます

1)NetworkStatsManager: これは、システム・レベルの権限を使用することを含みます。 2)手作業で/ proc/uid_stat/

ファイルを読み込んでください。後のオプションでは、起動時にデータが消去されることに注意してください。

ありがとうございました。

関連する問題