在我的Android应用中,为了确定某些功能,我正在使用getSimCountryIso()
和getNetworkCountryIso()
检查设备的ISO国家/地区代码。
在我的真实移动设备和模拟器上测试了这一点,所有这些都返回了某些值而没有任何错误。
其中一个是我的日常司机手机,其中有一张SIM卡,但其他人没有SIM卡。所以起初,我认为getSimCountryIso()
和getNetworkCountryIso()
总是返回一些值,但现在我有点怀疑,因为我所有的真实设备都曾经有过一次SIM卡,而仿真器可能与真实设备不同。< / p>
我想知道在真正的平板电脑上调用那些从不拥有SIM卡并且只有WiFi连接时会发生什么。我能一直期待一定的价值吗?或者是异常还是null?
答案 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位置或用户设置的区域设置,如果您真的不想侵占位置权限,并且可以容忍用户设置的区域设置不在用户必需的位置。