Androidはアプリケーションのトラフィック値を取得


Android 2.2以降のapiにはtrafficstatsクラスがあり、このクラスを使用するとアプリケーションのトラフィック情報を取得できます.私たちのプロジェクトは1.5まで互換性があるためです.
だから悲劇になって、自分でこの方法を実現するしかなくて、後で資料を探して応用の流量の情報が/proc/uid_に保存することを発見しますstat/uid(uidはプロセスのUID)ディレクトリの下に、2つのファイルtcp_があります.snd(送信ワード)
セクション数)とtcp_rcv(受信バイト数)は簡単で、ローカルファイルを読めば済むので、
public static long getTCP_RCV(int uid){

 File file1 ;

FileInputStream in;

file1 = new File("/proc/uid_stat/"+uid+"/tcp_rcv");

if(!file1.exists()){

return 0;

}

try {

in = new FileInputStream(file1);

StringBuffer sb = new StringBuffer();

 

int i=0;

byte[] s = new byte[1024*4];

 

while((i=in.read(s))!=-1){

 

sb.append(new String(s,0,i));

}

return Long.parseLong(sb.toString());

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return 0; 

  }

送信されたバイト数を取得するのはこれと同じであり,言うまでもない.現在のアプリケーションのUIDを取得するのも簡単です.直接int uid=androidです.os.Process.myUid();できました.問題は、現在のアプリケーションのトラフィックデータを取得するには、現在のアプリケーションが終了したときにメソッドを呼び出すに違いありません.どこにあるのでしょうか.アプリケーション継承クラスのonTerminateメソッドでこのメソッドを呼び出そうとしたが、プログラムの多くが実行されていないことがわかりました.この方法はシミュレーション環境で使用されるhttp://developer.android.com/reference/android/app/Application.htmlどうすればいいのか、一歩下がるしかありませんが、activityのonResume()とonPause()メソッドごとに(2つのデータの座差)を呼び出し、データを手に入れたら保存(保存時に前のactivityの保存値と加算)して、次のプログラムが起動したときにアップロードします.まずこのように実現しましょう.良い解決方法があれば、後で変更します.