Вы используете TrafficStats.getMobileTxByte
Из документов:
Возвращает количество байтов, переданных по мобильным сетям с момента загрузки устройства. Подсчитывает пакеты через все интерфейсы мобильной сети и всегда монотонно увеличивается с момента загрузки устройства. Статистика измеряется на сетевом уровне, поэтому она включает использование как TCP, так и UDP.
Как вы говорите:
всегда возвращает 0. При переключении в сотовую сеть, возвращаемые значения выглядят хорошо.
Да, это потому, что когда сотовая сеть выключена, мобильные данные (ячейки) не используются, поэтому 0.
Вы можете использовать это для получения данных используется всем устройством:
val totalBytes = TrafficStats.getTotalRxBytes()
Вы можете использовать нижеприведенное, если хотите получить внеклеточный трафик c:
val nonMobileBytes = TrafficStats.getTotalRxBytes() - TrafficStats.getMobileTxBytes
https://developer.android.com/reference/android/net/TrafficStats#getTotalRxBytes ()