【问题标题】:Issues with getLine1Number() to get devices's phone number [duplicate]getLine1Number() 获取设备电话号码的问题[重复]
【发布时间】:2014-01-27 11:02:08
【问题描述】:

我已经读到在下面的代码中使用 getLine1Number() 可能会出现诸如

之类的问题
  1. 返回空值
  2. 返回无效字符串
  3. 导致 nullPointer 异常。

还有其他问题吗?

我不确定的最大问题是,它是否返回无效号码(就像电话之前的号码一样)?这是最重要的问题,因为如果它返回一个数字,我可以依赖那个数字吗?

代码:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

所需权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

【问题讨论】:

    标签: android telephonymanager


    【解决方案1】:

    是的Null 在 SIM 存在时返回,但我们仍然无法读取该号码。有些 SIM 卡不允许这样做,而有些 SIM 卡中没有号码。

    引用TelephonyManager.getLine1Number() failingAndroid issue about TelephoneManagerThe impossibleness of getting your PhoneNumber in Android and AlertDialogs on Futures blog,似乎SIM 中的数字不是操作所必需的,实际上是由网络分配的。如果您阅读了问题的链接,则在 cmets 中人们建议用户可以从 Android 界面更改 SIM 中的号码。但是,这可能只有在旧版本中才有可能。虽然我尝试过更改 SIM 卡中的号码(Android 4.0 版本之后),但它不允许我这样做。就算有人改了,实数也是网络分配的。但是,由于您是从 SIM 存储中提取,我会说它不是 100% 安全的。

    这是我的 2 美分。希望能帮助到你。

    【讨论】:

      【解决方案2】:

      据我所知,返回的电话号码是存储在 SIM 卡的 MSISDN 上的任何内容,某些运营商不会填写。 (更糟糕的是,根据一些报道,这个数字实际上可能不正确!)

      很遗憾,我也不知道其他方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-31
        • 2017-08-21
        • 2015-07-22
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        • 2015-11-07
        相关资源
        最近更新 更多