在Android平板电脑上调用getSimCountryIso()时会发生什么?

时间:2017-08-13 09:39:39

标签: java android tablet country-codes

在我的Android应用中,为了确定某些功能,我正在使用getSimCountryIso()getNetworkCountryIso()检查设备的ISO国家/地区代码。 在我的真实移动设备和模拟器上测试了这一点,所有这些都返回了某些值而没有任何错误。

其中一个是我的日常司机手机,其中有一张SIM卡,但其他人没有SIM卡。所以起初,我认为getSimCountryIso()getNetworkCountryIso()总是返回一些值,但现在我有点怀疑,因为我所有的真实设备都曾经有过一次SIM卡,而仿真器可能与真实设备不同。< / p>

我想知道在真正的平板电脑上调用那些从不拥有SIM卡并且只有WiFi连接时会发生什么。我能一直期待一定的价值吗?或者是异常还是null?

1 个答案:

答案 0 :(得分:1)

我以为你会得到一个NullPointerException,但是在平板电脑上进行了测试 - Pixel C,运行Nougat - 我实际上为TelephonyManager.getSimCountryIso()TelephonyManager.getNetworkCountryIso()取回了空字符串。

我假设结果是NPE,因为在平板电脑上调用PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)将返回false。这足以告诉我你不应该试图在非电话设备上以这种方式获取SIM或网络国家代码。但是,如果您尝试在此类设备上使用TelephonyManager检索Context.getSystemService(),则仍会获得非空TelephonyManager - 它只是在提供SIM或网络国家。

在我看来,如果您正在处理没有Telephony系统功能的设备,您应该考虑使用GPS位置或用户设置的区域设置,如果您真的不想侵占位置权限,并且可以容忍用户设置的区域设置不在用户必需的位置。