三思再三思 2015-05-20 07:54 采纳率: 0%
浏览 4996

安卓 获取手机号码代码

现在版本的系统是不是不能用getLine1Number 获取到了。还可以通过手机短信获取,此方法有人验证过吗?

  • 写回答

5条回答 默认 最新

  • WorldMobile 2015-05-20 08:10
    关注

    获取不了用户自己的手机号码 getLine1Number返回空值

    手机上测试 返回都是空值,查了类库,好像这个getLine1Number 是获取手机号码的唯一方法. 郁闷。。。 代码如下:
    TelephonyManager tm = (TelephonyManager) getSystemService (Context.TELEPHONY_SERVICE);

          //获取手机号码
    
        String phoneNumber = tm.getLine1Number();
        if(phoneNumber == null || phoneNumber.trim().equals("")){
                phoneNumber = "不能获取到手机号码";
                }
    

    权限已加

    原因如下:
    手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。
    那么手机号为什么有的就能显示呢?
    这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
    对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因条件不同而不同。
    如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能。
    联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.
    能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题