Android获取本机号码(收集)

首先我们来明确几个概念:

SIM卡存储的数据可分为四类

第一类是固定存放的数据。这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI)、鉴权密钥(KI)、鉴权和加密算法等等。

第二类是暂时存放的有关网络的数据。如位置区域识别码(LAI)、移动用户暂时识别码(TMSI)、禁止接入的公共电话网代码等。

第三类是相关的业务代码,如个人识别码(PIN)、解锁码(PUK)、计费费率等。

第四类是电话号码簿,是手机用户随时输入的电话号码。用户全部资料几乎都存储在SIM卡内,因此SIM卡又称为用户资料识别卡。

IMSI是一个唯一的数字, 标识了GSM和UMTS 网络里的唯一一个用户. 它存储在手机的SIM卡里,它会通过手机发送到网络上. IMSI 与 SIM唯一对应。从技术层面而言,手机的SIM卡上并不会存储手机号码信息,只会存储IMSI(International Mobile Subscriber Identification Number)。手机号码(MSISDN)都是登记在HLR(Home Location Register)中的,在HLR中会把IMSI和MSISDN关联在一起。

IMEI也是一串唯一的数字, 标识了GSM 和 UMTS网络里的唯一一个手机.它通常被打印在手机里电池下面的那一面,拨 *#06# 也能看到它. IMEI 与 设备唯一对应.

1)IMEI不存在于SIM卡中,它是手机本身的串号。 
2)通常我们所说的手机号也不存在于SIM卡中,虽然SIM卡中有一个专门存储SIM卡本身号码的地方,但是此号码是通过手工设定的,而且是可以更改的。  SIM卡的识别通常使用IMSI号,这个对于SIM卡是唯一的。 
3)使用SimGetRecordInfo之类的函数获得SIM卡的IMSI号码能否成功依赖于设备制造商是否实现了此函数,据我所知在DOPOD的机器上是可以获得,但是在联想的机器上却不行,其他机器没有。 
4)获得IMEI以及IMSI可以通过RIL或者TAPI中的LINE操作的函数获得。

下面给出获取手机本机号码的代码:

TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);

String deviceid = tm.getDeviceId();

String tel = tm.getLine1Number();//手机号码

String imei = tm.getSimSerialNumber();

String imsi = tm.getSubscriberId();

添加权限:

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

注意,手机号码不是所有的都能获取。只是有一部分可以拿到。这个是由于移动运营商没有把手机号码的数据写入到sim卡中。这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。这就是为什么很多人得不到本机号码的原因。

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

网络上有朋友提出了下面的解决方案:

给10086发个短信就行了,然后获取发件箱中的发件人号码...反正给10086发短信或者打电话是免费的 ,但是你得注意了 
1、获取发件箱中的发件人号码后你得把发件箱中记录删除; 
2、就是你还要拦截10086给你回复的短信,不然会有个notification显示在屏幕上方,提示10086发来个短信,让你查看; 
这些都是为了取得本机号码的任务下,但同时又提高了用户的体验度...明白吗?

但是,有很多人说在收到的短信中没有收件人号码,所以可能还是取不到手机号码(还未测试过)

中国移动的SIM卡里只有IMSI号码而没有存储手机号码,在中国移动的HLR中会有一张映射表,专门用于把用户手机SIM卡的IMSI号映射成为用户的手机号码,这就是移动丢卡不丢号的业务也就是缘于此,也是一卡多号的原理。而电信CDMA(原来联通CDMA)的机卡合一的手机卡里会同时存在IMSI和手机号码。

•客户端获取:在客户端对移动用户而言只能够获取诸如IMSI、IMEI号等,并不能直接获得手机号。而对电信CDMA机卡合一用户可以获取手机号码。
•服务器端获取:在早期的移动白名单中是能够获得明文的手机号的,最近移动策略变了,手机号变成了天书般的唯一串号。因此目前从服务器端直接获取手机号也不行了。
   目前能够想到的能够相对可靠地自动获取用户手机号的方法只有通过短信方式。
•通过短信方式:让用户上行一条短信,通过短信网关获取用户手机号,从而将用户id与手机号绑定

另外:http://macleo.iteye.com/blog/1608311 这个地址集结了很多关于获取本机号码的理论和方法。

Android 获取手机号码相关推荐

  1. android 获取手机号码等相关功能

    Android 屏幕显示设置 程序中默的显示是带有标题栏和系统信息栏的,有的时候,这很影响程序界面的美观.手机默认的是竖屏,或与感应器状态相关,为了某种效果,我们的程序需要限制使用横屏或竖屏.以下的代 ...

  2. 关于android获取手机号码(主要是移动手机)

    转载+整理(尚未找到原文链接,我参考与http://blog.csdn.net/sunny2come/article/details/8290023) 首先手机号码不是所有的都能获取,只是有很少一部分 ...

  3. Android获取手机号码

    文章转自:http://www.qiling.org/post/706.html SIM卡存储的数据可分为四类: 第一类是固定存放的数据.这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动 ...

  4. android 获取手机号码 权限,Android跳转到通讯录获取用户名称和手机号码

    思路: 1.点击跳转到通讯录界面 ` Uri uri = Uri.parse("content://contacts/people"); Intent intent = new I ...

  5. Android 获取手机号码及IMEI码

    package cn.sd.sx.atelimei;import android.app.Activity; import android.content.Context; import androi ...

  6. android获取到电信的手机号码,Android基站信息获取以及Sim卡相关信息获取

    概述: 本篇主要介绍Android获取基站信息的方式,除此之外,还有SIM卡相关字段获取,先介绍一些缩写的概念,后续更新代码的写法. 前言:之前有碰到一个需求,需要获取SIM卡的相关属性:IMSI号. ...

  7. Android获取手机设备识别码(IMEI)和手机号码

    最近看了下获取手机设备ID和手机信息以及SIM的信息例子,主要还是借鉴别人的,现在自己写一下,算是巩固加深了,也希望能给大家一个参考 必要的条件还是一部真机,SIM卡或者UIM卡. 首先,在Andro ...

  8. Android手机中获取手机号码和运营商信息

    代码如下: package com.pei.activity;import android.app.Activity; import android.os.Bundle; import android ...

  9. android 通过手机号码查询联系人,android获取手机通讯录联系人

    android获取手机通讯录联系人信息 private void getPhoneContacts() { ContentResolver resolver = this.getContentReso ...

  10. android连不到手机号码,【Android】手机号码获取问题

    手机号码不是所有的都能获取.只是有一部分可以拿到.这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码 ...

最新文章

  1. 概述nodejs核心机制
  2. 【数据结构与算法】之深入解析“UTF-8编码验证”的求解思路与算法示例
  3. 4.28—013—周日
  4. 超美的文件夹图标,右键秒改,实用方便适合文件夹分类
  5. 一道NP中的EIGRP拓扑表的题
  6. 洛谷P1351 联合权值(树形dp)
  7. 三网物联卡的优缺点有哪些
  8. pythontkinter使按钮失效_python2.7为什么点击了quot;开始quot;按钮后,tkinter上的按钮,图中红色部分,再也点不动了? - SegmentFault 思否...
  9. 远控免杀专题10--TheFatRat免杀
  10. CEF加载PPAPI插件
  11. s3c2416运行JAVA_实时时钟RTC - 基于S3C2440的Linux-3.6.6移植_Linux编程_Linux公社-Linux系统门户网站...
  12. msyql创建数据库并指定字符集
  13. 学习pytorch中归一化transforms.Normalize
  14. 年薪16薪,工作福利靠砸钱 ?在京东做测试员原来这么爽
  15. [零基础学Python]字典,你还记得吗?
  16. 算法 —— 排序 —— 优先队列
  17. 下载上市公司财报并可视化某科目
  18. 【分享】SBO初始化的过程及内容
  19. OpenCV如何叠加大小不同的图片
  20. 2019华为机试题 解析文本

热门文章

  1. 微信小程序 action-sheet组件 + 分享代码实现
  2. C#中datagridview实现单元格输入框加按键,下拉框功能
  3. Xcode 建立 UIKit 项目(Hello World)
  4. 如何用计算机进行文件夹整理,如何对电脑文件进行分类整理,试试下面这四个步骤...
  5. python爬取12306火车票信息_python利用selenium+requests+beautifulsoup爬取12306火车票信息...
  6. 接入物流快递单号自动识别查询接口API
  7. Windows Hello安装和体验
  8. 华为太极magisk安装教程_怎么升级Magisk到最新19.4版本-正确刷入Magisk,获取ROOT教程...
  9. 浪潮之巅--苹果的魔力
  10. 系统试运行报告是谁写的_家门口就能免费健康自检自测 延吉智慧健康驿站试运行 健康检测服务将惠及更多居民...