Androidでのトラフィック計測について調べています。私はGalaxy S4で開発しており、1分に1回TrafficStats APIをキャッチし、蓄積されたトラフィック(AKA BaseTraffic)をSharedPreferenceに保存し、現在のトラフィックからBaseTrafficを引いた差をデータベースに保存するサービスをプログラムしました。
問題は、短時間 (15 分) に TrafficStats が大きすぎる値 (1 分あたり 1.6 GB) を返し、常に同じ値を返すことです。これがバグなのか他の問題なのか誰かが知っています。
私のコードは、トラフィックを取得するための次のものです。
public class TrafficTracker {
public static long getCurrentTraffic() {
long traff = 0;
traff = (TrafficStats.getTotalRxBytes() + TrafficStats.getTotalTxBytes());
if (traff > 0) {
return traff;
} else {
throw new UnsupportedOperationException("TrafficStats not supported");
}
}
public static long getTrafficWithOutBase(long baseTraffic) {
return TrafficStats.getTotalTxBytes() + TrafficStats.getTotalRxBytes() - baseTraffic;
}
}
そして、このコードをここに呼び出します:
if (preferences.getBaseTraffic() != null) {
if (TrafficTracker.getCurrentTraffic() > preferences.getBaseTraffic().getByteTraffic()) {
TrafficObject trafficObject = new TrafficObject(new Date(calendar.getTimeInMillis()), TrafficTracker.getTrafficWithOutBase(preferences.getBaseTraffic().getByteTraffic()));
daoTraffic.create(trafficObject);
preferences.setBaseTraffic(new TrafficObject(new Date(System.currentTimeMillis()), preferences.getBaseTraffic().getByteTraffic() + trafficObject.getByteTraffic()));
} else {//when stats are reseted
TrafficObject trafficObject = new TrafficObject(new Date(calendar.getTimeInMillis()), TrafficTracker.getCurrentTraffic());
daoTraffic.create(trafficObject);
preferences.setBaseTraffic(trafficObject);
}
}
** アップデート **
エラーが見つかりました:)。> の代わりに >= を置き換えます。データまたは Wi-Fi から切断されたときに正常に動作するようになりました。
if (TrafficTracker.getCurrentTraffic() >= preferences.getBaseTraffic().getByteTraffic())