TrafficStats API 的 getMobileRxBytes() 和 getMobileTxBytes() 无法正常工作



问题是已知的:当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 个参数

  1. 连接性(移动数据、无线网络)
  2. 订阅者ID(对于OS 10 +,我们需要传递null,对于以前的版本,我们需要传递null 使用TELEPHONY_SERVICE传递订阅者 ID)。
  3. 开始时间
  4. 结束时间。

您可以使用以下代码获取订阅者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 很有用。

相关内容

  • 没有找到相关文章

最新更新