问题是已知的:当wifi启动时,TrafficStats.getMobileRxBytes()和getMobileTxBytes()自Lollipop(https://issuetracker.google.com/issues/37009612)以来返回0。 我发现了一种忽略零值的解决方法,除了在某些设备(例如三星 5G)上,在 wifi 上时,我们得到非 0 值。它只带来 rmnet1 接口值流量(rmnet1 用于 VoLTE,rmnet0 用于普通数据)。
1/为什么只在三星设备上? 虽然它似乎是由Android操作系统处理
的2/三星 5G 设备上的另一个观察结果(至少在三星 S20 上):当 wifi 关闭时,小区计数器(自启动以来的所有小区流量:rmnet0 + rmnet1)不一致,有时我们得到一个值 V1,有时得到一个值 V2(与 V1 不同)
类似的经历?
我没有使用过支持 5G 的设备,但据我所知,使用NetworkStats.Bucket
的对象,我们可以在querySummaryForDevice()
的帮助下查询 RxBytes 和 TxBytes,这需要大约 4 个参数
- 连接性(移动数据、无线网络)
- 订阅者ID(对于OS 10 +,我们需要传递null,对于以前的版本,我们需要传递null 使用
TELEPHONY_SERVICE
传递订阅者 ID)。 - 开始时间
- 结束时间。
您可以使用以下代码获取订阅者ID
private String getSubscriberId(Context context, int networkType) {
String deviceUniqueIdentifier = null;
if (ConnectivityManager.TYPE_MOBILE == networkType) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getSubscriberId();
}
return "";
}
这对我获得 RxBytes 和 TxBytes 很有用。