getLine1Number()的问题,以获取设备的电话号码

时间:2014-01-09 03:12:07

标签: android telephonymanager

我已经读过使用getLine1Number(),如下面的代码中可能会出现问题,例如

  1. 返回null
  2. 返回无效字符串
  3. 导致nullPointer异常。
  4. 是否还有其他问题?

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

    代码:

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

    必需许可:

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

2 个答案:

答案 0 :(得分:2)

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

不幸的是,我也不知道任何其他方法。

答案 1 :(得分:1)

当SIM存在时,会返回Null,但仍然无法读取该号码。某些SIM卡不允许这样做,而其他SIM卡则没有SIM卡中的号码。

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

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