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

What will happen when getSimCountryIso() is called on Android Tablets?

在我的 Android 应用中,为了确定某些功能,我正在使用 getSimCountryIso()getNetworkCountryIso() 检查设备的 ISO 国家/地区代码。 在我的真实移动设备和模拟器上对此进行了测试,并且所有 returned 某些值没有任何错误。

其中一个是我的日常driverphone里面有SIM卡,其他的没有SIM卡。所以起初,我认为 getSimCountryIso()getNetworkCountryIso() 总是 return 一些值,但现在我有疑问,因为我所有的真实设备都曾经有过一次 SIM 卡,而模拟器可能与真实的。

我想知道当在 从来没有 SIM 卡 并且只有 WiFi 连接的真实平板电脑上调用这些时会发生什么。我总是可以期望某个值吗?或者异常或 null?

我以为你会得到 NullPointerException,但在平板电脑上测试过它 - Pixel C,运行 Nougat - 我实际上得到了 TelephonyManager.getSimCountryIso()TelephonyManager.getNetworkCountryIso() 的空字符串.

我原以为结果会是 NPE,因为在平板电脑上调用 PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) 会 return false。这足以告诉我,您不应该尝试在非 phone 设备上以这种方式获取 SIM 卡或网络国家/地区代码。但是,如果您尝试在此类设备上使用 Context.getSystemService() 检索 TelephonyManager,您仍然会得到一个非空的 TelephonyManager - 它对提供 sim 或网络国家。

我认为,如果您使用的设备没有电话系统功能,您应该考虑使用 GPS 定位,或者如果您真的不想侵犯位置,则可以考虑使用用户设置的区域设置权限,并且可以容忍用户设置的语言环境不在用户必须所在的位置。