Есть ли у нас какой-либо флаг или значение на телефоне, которые могут помочь решить это?
Различают международный роуминг и роуминг внутри страны.
Ответы (2)
Я думаю, что это невозможно, вы можете просто различать, используете ли вы роуминг или нет, но, по крайней мере, официально я не могу найти никакой информации об этом.
- getRoaming() из класса
ServiceState
. - isRoaming() из класса
NetworkInfo
. - Обнаружение роуминга в StackOverflow.
---- ИЗМЕНИТЬ ----
Поскольку, вероятно, для этого нет встроенного метода, вы можете просто определить и вести внутренний список национальных телефонных компаний и посмотреть, соответствует ли оператор SIM-карты одному из них, и в этом случае у вас будет национальный роуминг, международный роуминг, если текущий оператор не совпадает с оператором SIM-карты и его нет в вашем списке, или без роуминга, если текущий оператор совпадает с оператором SIM-карты. Отрицательным моментом является то, что вам нужно будет отслеживать всех национальных операторов и добавлять их в список, если есть какие-то новые, но это происходит не слишком часто (или, по крайней мере, здесь).
Так что в основном это будет что-то вроде этого:
TelephonyManager telephMan = ((TelephonyManager) Context.getSystemService(Context.TELEPHONY_SERVICE));
// This will be the current registered operator
String currentOperatorName = telephMan.getNetworkOperatorName();
// This will return the SIM operator
String simOperatorName = telephonyManager.getSimOperatorName();
// Additionally you'll have to keep a list of national operators
ArrayList<String> myCountryOperators = new ArrayList<String();
myCountryOperators.add("...");
myCountryOperators.add("...");
...
if (currentOperatorName.equals(simOperatorName)) {
// No roaming
}
else if (myCountryOperators.contains(currentOperatorName)) {
// National roaming
}
else {
// International roaming
}
если это телефон GSM, на мой взгляд, проще сравнить код страны, установленный на SIM-карте, с кодом страны сетевого оператора с помощью TelephonyManager.getNetworkCountryIso() и TelephonyManager.getSimCountryIso(). Если они совпадают, вы находитесь в одной стране, иначе не надо. И вам не нужно вести список имен...