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

标签 java android tablet country-codes

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

其中一部是我日常使用的司机手机,里面有 SIM 卡,但其他手机都没有 SIM 卡。所以一开始,我以为 getSimCountryIso()getNetworkCountryIso() 总是返回一些值,但现在我很怀疑,因为我所有的真实设备都曾经有 SIM 卡一次和模拟器可能与真实的有所不同。

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

最佳答案

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

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

在我看来,如果您使用的设备不具备电话系统功能,则应该考虑使用 GPS 位置,或者如果您确实不想侵犯位置权限,则应考虑使用用户设置的区域设置可以容忍用户设置的区域设置不是用户所在的位置。

关于java - 在 Android 平板电脑上调用 getSimCountryIso() 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45659002/

相关文章:

java - 在 Java 中为对象数组赋值的更好方法

java - 在条件表达式中使用 equals 方法

java - Intellij 在没有程序参数或 vm 选项的情况下运行应用程序

android:如何停止和启动线程(带有错误代码示例)

android - 如何从数据库文件生成 SQLite 实体关系图

java - 自定义相机不保存整个图像

java - 如何使用ctiteria API spring data JPA规范定义多个Join on条件?

android - 为各种屏幕分辨率(智能手机、平板电脑、笔记本电脑等)设计样式

jquery - 使用子菜单 css/jquery 进行导航的移动和平板设备

java - 在 Java Applet 上捕获 WACOM 平板电脑事件