Android is a feature-rich mobile operating system, but that doesn’t mean that it’s free from issues. On the contrary, some issues in the OS that were discovered years ago still haven’t been fixed, while new issues crop up in newer versions. One such issue that has been known for a long time is the lack of support for national roaming.
The Problem
Some carriers and mobile virtual network operators (MVNO) require data roaming to be enabled in order for any data transfer to take place between the network and the device. This is because Android detects that the device is roaming when it really isn’t. When does this happen? On rare occasion, there’s a mismatch that occurs with the carrier data stored in Android, in the form of MCC and MNC codes as well as the IMSI.
A mobile country code (MCC) is used in combination with a mobile network code (MNC) to uniquely identify a mobile network. An international mobile subscriber identity (IMSI), on the other hand, is used to identify the user of a mobile network and is a unique identification associated with all mobile networks.
Some MVNOs do not have the same IMSI as their parent carrier. Android, therefore, identifies the MVNO as a separate network, and the different IMSIs make it seem to Android that the device is roaming even when it isn’t.
The result is that users switch on the data roaming toggle to get mobile data working thinking that they won’t get charged. However, as soon as they travel outside of their country’s borders, their phone’s SIM card latches on to the signal of a local carrier (if the necessary roaming agreement is in place). Then, the customer is charged for use of data roaming, and in many cases, is charged exorbitantly.
This is because the data roaming switch was accidentally left enabled by the user. It didn’t result in charges when it was being used within a country’s borders, but as soon as the SIM card was used internationally, the user had to pay for roaming charges even if they didn’t want to use a roaming SIM card.
In the E.U., there are no charges for international roaming, a change which took effect starting June 15, 2017. (There are conditions attached to this, such as a fair use policy and conditional data limits, of course.) This means that when mobile network users roam within the E.U.’s boundaries, there are no roaming fees.
Users can thus enable data roaming and forget about it while traveling, but that would be a bad idea because whenever they travel outside the E.U., then international roaming charges will be applicable. Users on Google’s issue tracker have also reported that satellite roaming charges are applicable even inside E.U. boundaries if the device cannot latch to any national network—a common scenario when at sea, for example.
The Solution
The solution here is a national roaming toggle. A national roaming toggle will enable the user to keep roaming on for domestic use, but will ensure that roaming is never used outside the user’s home country without their consent. This is something that users have been asking Google for nearly eight-and-a-half years ago, but there hadn’t been any progress on the issue. The only fixes involved either installing an Xposed Module to get a national roaming option, modifying framework-res (which could only be done on some phones), or installing certain custom ROMs.
Roaming settings on the Google Pixel 2 XL running Android 8.1 Oreo
This will hopefully change soon as Sony is authoring the necessary commits to add support for national roaming as well as support for a national roaming UI in Android. When this option shows up in Android (most likely in Android P), it will be hugely beneficial for international travelers as they won’t have to remember to turn off data roaming each time before heading for an international trip.
P.S. The screenshots shown above showcase Sai’s Oreo dark theme, which was installed using Substratum. You can install the dark theme without root by following this procedure.