我们在电话上是否有任何标志或价值可以帮助决定这一点?
问问题
1597 次
2 回答
3
我认为这是不可能的,你可以区分你是否使用漫游,但至少官方我找不到任何关于这个的信息。
- 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
}
于 2014-03-06T19:29:15.580 回答
2
如果是 GSM 手机,我认为使用 TelephonyManager.getNetworkCountryIso() 和 TelephonyManager.getSimCountryIso() 比较 SIM 卡中设置的国家代码和网络运营商的国家代码更容易,如果它们匹配你在同一个国家,否则不要。而且您不需要保留姓名列表...
于 2015-08-10T19:11:18.357 回答