4334


現在パケット使用量を取得するアプリを作成しており、2点わからない個所がありました。この場をお借りして、質問させていただきます。

  1. [`TrafficStats`](https://developer.android.com/reference/android/net/TrafficStats.html) のリセットについて

パケット量の取得を、以下の様な方法で取得しております。

[code]

    TrafficStats.getMobileRxBytes() + TrafficStats.getMobileTxBytes()
    
[/code]

日付が変更された際、 `TrafficStats` の情報をリセットしたいのですが、方法が見つかりませんでした。  
`TrafficStats` の情報をリセットする方法は、ありますか？

  2. `TrafficStats.getUidRxBytes(uid)` について

各アプリ毎のパケット使用量は、`TrafficStats.getUidRxBytes(uid)` で取得しております。取得した値を見てみると、 WiFi
の使用した通信も含まれているように感じます。 Mobile 通信だけ取得する方法は、ありませんか？

何卒よろしくお願いいたします。


CC BY-SA 3.0
2015-01-09T07:24:17.730
4331
2015-01-09T14:37:01.877
2015-01-09T07:32:59.963
4978
7265
question
android java monitoring
TrafficStats クラスを使用した通信量の取得とリセット


最初のご質問だけ回答します。

>   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?](https://stackoverflow.com/questions/12613402/android-
statistic-3g-traffic-for-each-app-how)


CC BY-SA 3.0
2015-01-09T07:55:45.123
4334
2015-01-09T14:37:01.877
2017-05-23T12:38:56.083
-1
4331
answer