質問: 現在パケット使用量を取得するアプリを作成しており、2点わからない個所がありました。この場をお借りして、質問させていただきます。 1. `TrafficStats` のリセットについて パケット量の取得を、以下の様な方法で取得しております。 ``` TrafficStats.getMobileRxBytes() + TrafficStats.getMobileTxBytes() ``` 日付が変更された際、 `TrafficStats` の情報をリセットしたいのですが、方法が見つかりませんでした。 `TrafficStats` の情報をリセットする方法は、ありますか? 2. `TrafficStats.getUidRxBytes(uid)` について 各アプリ毎のパケット使用量は、`TrafficStats.getUidRxBytes(uid)` で取得しております。取得した値を見てみると、 WiFi の使用した通信も含まれているように感じます。 Mobile 通信だけ取得する方法は、ありませんか? 何卒よろしくお願いいたします。
回答: 最初のご質問だけ回答します。 > > 1. TrafficStats のリセットについて > > > おっしゃる通り、Android ではリセットは難しい様です。通常の Linux OS であれば、NIC 用の kernel module を一旦 unload して再度 load する方法(`modprobe -r ... && modprobe ...`)があるのですが、Android の場合は再起動するしかないのかもしれません。 面倒な方法になりますが、24時間置きに RX と TX の値を記録しておいて相対的な差分値を求める、というのが現実的かもしれませんね。 追記: > > 2. TrafficStats.getUidRxBytes(uid) について > > > TrafficStats クラスのメソッドは基本的に `/proc/uid_stat/[uid]/..` や `/proc/net/xt_qtaguid/stats` などを読み込んで通信量を計算しています。これらのファイルを見ますと、個別の UID のレベルでは WiFi と Mobile 通信の通信量を分けていない様です。 そこでざっと検索してみましたが、以下の記事が参考になるかもしれません。 android statistic 3g traffic for each APP, how?