Androidはアプリケーションのトラフィック値を取得
Android 2.2以降のapiにはtrafficstatsクラスがあり、このクラスを使用するとアプリケーションのトラフィック情報を取得できます.私たちのプロジェクトは1.5まで互換性があるためです.
だから悲劇になって、自分でこの方法を実現するしかなくて、後で資料を探して応用の流量の情報が/proc/uid_に保存することを発見しますstat/uid(uidはプロセスのUID)ディレクトリの下に、2つのファイルtcp_があります.snd(送信ワード)
セクション数)とtcp_rcv(受信バイト数)は簡単で、ローカルファイルを読めば済むので、
送信されたバイト数を取得するのはこれと同じであり,言うまでもない.現在のアプリケーションのUIDを取得するのも簡単です.直接int uid=androidです.os.Process.myUid();できました.問題は、現在のアプリケーションのトラフィックデータを取得するには、現在のアプリケーションが終了したときにメソッドを呼び出すに違いありません.どこにあるのでしょうか.アプリケーション継承クラスのonTerminateメソッドでこのメソッドを呼び出そうとしたが、プログラムの多くが実行されていないことがわかりました.この方法はシミュレーション環境で使用されるhttp://developer.android.com/reference/android/app/Application.htmlどうすればいいのか、一歩下がるしかありませんが、activityのonResume()とonPause()メソッドごとに(2つのデータの座差)を呼び出し、データを手に入れたら保存(保存時に前のactivityの保存値と加算)して、次のプログラムが起動したときにアップロードします.まずこのように実現しましょう.良い解決方法があれば、後で変更します.
だから悲劇になって、自分でこの方法を実現するしかなくて、後で資料を探して応用の流量の情報が/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の保存値と加算)して、次のプログラムが起動したときにアップロードします.まずこのように実現しましょう.良い解決方法があれば、後で変更します.