6

私はこれについてたくさん検索しました。目的を部分的に解決する同じコードがいたるところに見つかりました。API ドキュメントにあるように、デバイスが再起動するとカウンターがリセットされます。再起動しなくてもカウンターがリセットされることがあります。以下はコードです

float totalRxBytes = (float)TrafficStats.getTotalRxBytes()/(float)1048576;  // Received
float totalTxBytes = (float)TrafficStats.getTotalTxBytes()/(float)1048576;  // Sent
float mobRxBytes = (float)TrafficStats.getMobileRxBytes()/(float)1048576;
float mobTxBytes = (float)TrafficStats.getMobileTxBytes()/(float)1048576;
float wifiRxBytes = totalRxBytes - mobRxBytes;
float wifiTxBytes = totalTxBytes - mobTxBytes;  

しかし、このデータを特定の日付または 1 か月間取得する方法がわかりませんでしたか? 助けてください。任意のポインタをいただければ幸いです。ありがとう。

4

2 に答える 2

5

まず、TrafficStats.getTotalRxPackets() :

デバイスの起動以降に受信したパケット数を返します。

TrafficStats.getTotalTxPackets()も同様です。

このクラスは、月の統計を取得するのには役立ちません。

API 23 から動作するソリューションをお勧めします。

NetworkStatsManager

このクラスは、デバイスごとまたはパッケージごとに統計を取得する可能性があります。あなたにとって特に役立つのは関数です:

NetworkStatsManager.querySummaryForDevice()

これは、3 番目のパラメーターとして測定開始時刻を、4 番目のパラメーターとして測定終了時刻を想定しています。

サンプル プロジェクトは、ここにあります。NetworkStatsManagerへのアクセスを取得して、適切なランタイム権限を要求する方法を示しています。

このソリューションは API 23+ のみです。

本当にTrafficStatsを使用したい場合は、1 時間ごとにTrafficStats.getTotalRxPackets()の結果を取得するサービスを作成し、差を数えて、1 日ごとに異なる行でデータベースに保存します。

于 2016-10-18T07:11:20.873 に答える