他のAndroidアプリが生成するネットワークトラフィックの量を見つけます
-
26-10-2019 - |
質問
私は、ほとんどのデータトラフィックを使用するアプリをユーザーに表示できるように、さまざまなアプリケーションのトラフィック使用量を測定する必要があるバックグラウンドサービスを作成しようとしています。
スペアパーツアプリはまさにそれを行うことがわかりましたが、1.6 Dell Streakデバイスにインストールした後、「ネットワーク使用量」のために「バッテリー使用データが利用できない」ことを常に取得します。この機能はすべてスペアパーツで機能しますか?また、スペアパーツの作業ソースコードが見つかりませんでした。
https://android.googlesource.com/platform/development/+/froyo-release/apps/spareparts
時代遅れまたは不完全なように見えます。 (?)
しかし、スペアパーツは、アプリごとのCPU使用量を測定するようです。ルートされていない電話でどのようにそれを行いますか?
アプリごとのトラフィックをどのように測定できるかについての私の一般的なアイデアは、定期的にチェックすることです
"sys/class/net/" + sWiFiInterface + "/statistics/rx_bytes"
"sys/class/net/" + sWiFiInterface + "/statistics/tx_bytes"
"sys/class/net/" + sMobileInterface + "/statistics/rx_bytes"
"sys/class/net/" + sMobileInterface + "/statistics/tx_bytes"
ファイルと、現在どのアプリがフォーカスに焦点を合わせているかを確認するため、生成されたネットワークトラフィックを引き起こす可能性が最も高くなります。
残念ながら、現在焦点を当てているアプリを取得する方法が見つかりません。
私はこれを見つけました:
Android、現在(Foregorundで)現在表示されているアクティビティに関する情報を取得する方法は?
しかし、それはテストに関するものであり、非根付きAndroidデバイスで実行されている3Dパーティーサービスだけではありません。
どのようなアクティビティが実行されているかを取得できます ActivityManager.getCurrentTasks()
, 、しかし、それらのいずれも焦点を合わせることができます。 Android Architectsは、セキュリティ上の懸念のために、3Dパーティーアプリにどのアプリに焦点を合わせているかを明示的に望んでいないようです
(見る http://android.bigresource.com/track/android-zb2mhvzx4/).
これを回避する方法はありますか?
また、どのアクティビティがトラフィックを食べるだけでなく、どのサービスを食べるかを検出したい場合は、現在実行中のすべてのサービスを取得できます。ActivityManager.getCurrentSerives()
そして、それぞれが前景モードであるかどうかを確認します(Androidがリソースを必要とする場合とは異なります)。しかし、これも私にはどこにももたらされません。
何か案は?
解決
現在のアプリケーションを検出できます ActivityManager.getRunningAppProcesses
電話。のリストを返します RunningAppProcessInfo
記録。どのアプリケーションが前景チェックにあるかを判断します RunningAppProcessInfo.importance
平等のフィールド RunningAppProcessInfo.IMPORTANCE_FOREGROUND
.
しかし、その呼び出しをウェアにしてください ActivityManager.getRunningAppProcesses()
メソッドは、UIスレッドでは実行する必要があります。バックグラウンドスレッド(Asynctaskを介して)で呼び出すだけで、正しい結果を返します。小切手 私の投稿 詳細については。