0

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())
4

1 に答える 1