【问题标题】:What will happen when getSimCountryIso() is called on Android Tablets?在 Android 平板电脑上调用 getSimCountryIso() 会发生什么?
【发布时间】:2017-08-13 09:39:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android tablet country-codes


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢您的测试和友好的回答!它有很大帮助,没有这个我永远不会知道..
    • 仅供参考,我在 Genymotion 的 Pixel C Nougat 模拟器上进行了测试。 PackageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) 返回 true,TelephonyManager.getSimCountryIso() 和 TelephonyManager.getNetworkCountryIso() 返回字符串“us”。再次,您的回答真的很有帮助,谢谢!
    • 没问题!很高兴我能帮上忙。我想知道您的 Pixel C 是否因为模拟器中的某些设置而返回 true 和“我们”...奇怪...
    猜你喜欢
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多