首先手机号码不是所有的都能获取,只是有很少一部分可以拿到。

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

从技术层面而言,手机的SIM卡上并不会存储手机号码信息,只会存储IMSI(International Mobile Subscriber Identification Number)。手机号码(MSISDN)都是登记在HLR(Home Location Register)中的,在HLR中会把IMSI和MSISDN关联在一起。

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

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

这里再提另一个获取手机号的方式:转载于http://blog.vsharing.com/51bk/A908299.html

移动支持2种上网模式:cmwap与cmnet
CMWAP 和 CMNET 只是移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。 cmwap应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式。主要的目的是通过WAP网关完成WAP-WEB的协议转换以达到节省网络流量和兼容现有WEB应用的目的。WAP网关从技术的角度讲,只是一个提供代理服务的主机,它不一定由网络运营商提供。目前只有唯一的一个WAP网关:10.0.0.172(但各省市可能有各自的二级代理),标准的WAP网关仅仅实现了HTTP代理的功能,并未完成路由、NAT等局域网网关的功能。这就决定了它在应用上所受到的限制。目前,移动的WAP网关对外只提供HTTP代理协议(80和8080端口)和WAP网关协议(9201端口)。

CMNET拥有完全的Internet访问权,与internet一样,没有带来网关。

有了这个概念之后,让我们继续:
如何通过程序获得用户手机号:

如果用户要访问目标wap网站,在浏览器中输入wap.jxc114.com网址,选择使用cmwap接入点上网,则默认会先到wap网关,由wap网关进行转接到目标wap网站。因为是经过了wap网关的过滤,在出来的信息中,网关向http header中注入了用户的手机号信息,同时分两种情况,一个是明文的手机号,一种是被加密的手机号码,为256为字符,对于明文的可以使用如下方法直接获得:request.ServerVariables("x-up-calling-line-id ")对于加密手机号:网关把他放到header的“deviceid”的属性中,如果要获得手机号,则需要移动misc系统的支持,通过密文找到对应的手机号。(现在已经无法使用了)

但是好景不长,到了2005年,移动为了打压免费的wap网站(移动梦网流量被免费wap站分流了n多),取消了网关返回用户手机号的功能,同时也过滤掉了返回UserAgent的功能。就是因为移动的一己私利,导致当年如火如荼的移动互联网萌芽被扼杀了,指导今天wap网站也再没有什么新的起色。但愿随着无线高速公路(3G)的全面商用,移动能为了整个移动互联网产业的发展把,高速公路的收费站(CMNET)取消,或者资费降低。只有整个产业环境具备了,无线互联网才能真正有所发展,要不然就是一个炒作概念。。。。当然这些都是随便写的,下面继续原理分析:
我们知道做无线互联网,最重要的两个信息一个就是UA、一个就是用户手机号;知道了UA就可以知道手机的机型,我就可以提供更有针对的显示界面,比如使用N95手机进行访问,页面直接显示为240×320进行显示,是Symbian OS v9.2操作系统S60平台,我们就可以提供相应的下载软件,这些都是UI交互中最必须的(移动做的差,还不让别人做的好,是么世道!);而获得用户的手机号,就可以知道订购关系,甚至可以进行小额移动支付业务。
那么网关又是如何获得UA和用户的手机号呢?
我们知道每个SIM卡背面的号码是SIM卡的电子串号,也叫IMSI号码,这个号码是全球唯一的,是国际电联分配给每个运营商的,电话号码和IMSI没有任何关系,当开通服务时电话号码和IMSI号码在交换机上做绑定,这样你的SIM卡就可以用了。(所以丢了sim卡,但是通过不卡,手机号是可以不变的)
那么用户在使用客户端也好,浏览器也好,访问wap网址的时候,根据3GPP的链路协议,会自动上传imsi号码,网关获得imsi再到misc系统中(misc再调用移动的基础网络数据)获得用以绑定的手机号,至于是否在从网关中吐出手机号,那就是移动说的算了。
至于UA,如果使用浏览器则浏览器会默认上传;如果是用客户端的方式,则需要受到填充UA信息,当然也可以不填。
是以至此,那么怎么获得手机号呢?
1、 大的sp都会和移动签约,申请获得网关转发的手机号;
2、 与业务进行绑定,要求用户填写手机号码(这也是没有办法的办法,所以为什么很多wap站都要求用户输入手机号的原因)
3、 和已经签约sp进行合作;
 
再补充一下,如果使用cmnet上网的时候,是没有办法获得用户手机号码的,因为他没有通过网关。

Android开发平台中,可通过TelephonyManager 获取本机号码。

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

txtPhoneNumber.setText(phoneMgr.getLine1Number()); //txtPhoneNumber是一个EditText 用于显示手机号

注:

根据Android的安全机制,在使用TelephonyManager时,必须在AndroidManifest.xml中添加<uses-permission android:name="READ_PHONE_STATE" /> 否则无法获得系统的许可。

手机型号 Build.MODEL

String

MODEL

The end-user-visible name for the end product.

sdk版本 Build.VERSION.SDK

String

SDK

This constant is deprecated. Use SDK_INT to easily get this as an integer.

及frimware版本号(系统版本号) Build.VERSION.RELEASE

String

RELEASE

The user-visible version string.

  1. private void loadPhoneStatus(){
  2. TelephonyManager phoneMgr=(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
  3. txtPhoneModel.setText(Build.MODEL); //手机型号
  4. txtPhoneNumber.setText(phoneMgr.getLine1Number());//本机电话号码
  5. txtSdkVersion.setText(Build.VERSION.SDK);//SDK版本号
  6. txtOsVersion.setText(Build.VERSION.RELEASE);//Firmware/OS 版本号
  7. }

事实上,Build能向我们提供包括 硬件厂商,硬件编号,序列号等很多信息 调用方法也都同上,很简单。

String

BOARD

The name of the underlying board, like "goldfish".

String

BOOTLOADER

The system bootloader version number.

String

BRAND

The brand (e.g., carrier) the software is customized for, if any.

String

CPU_ABI

The name of the instruction set (CPU type + ABI convention) of native code.

String

CPU_ABI2

The name of the second instruction set (CPU type + ABI convention) of native code.

String

DEVICE

The name of the industrial design.

String

DISPLAY

A build ID string meant for displaying to the user

String

FINGERPRINT

A string that uniquely identifies this build.

String

HARDWARE

The name of the hardware (from the kernel command line or /proc).

String

HOST

String

ID

Either a changelist number, or a label like "M4-rc20".

String

MANUFACTURER

The manufacturer of the product/hardware.

String

MODEL

The end-user-visible name for the end product.

String

PRODUCT

The name of the overall product.

String

RADIO

The radio firmware version number.

String

SERIAL

A hardware serial number, if available.

String

TAGS

Comma-separated tags describing the build, like "unsigned,debug".

long

TIME

String

TYPE

The type of build, like "user" or "eng".

String

UNKNOWN

Value used for when a build property is unknown.

String

USER

=================================================

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

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

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

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

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

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

IMSI是一个唯一的数字, 标识了GSM和UMTS 网络里的唯一一个用户. 它存储 在手机的SIM卡里,它会通过手机发送到网络上. IMSI 与 SIM唯一对应

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操作的函数获得。

  1. 代码:
  2. TelephonyManager tm = (TelephonyManager)this.getSystemService(TELEPHONY_SERVICE);
  3. /*
  4. * 电话状态:
  5. * 1.tm.CALL_STATE_IDLE=0          无活动
  6. * 2.tm.CALL_STATE_RINGING=1  响铃
  7. * 3.tm.CALL_STATE_OFFHOOK=2  摘机
  8. */
  9. tm.getCallState();//int
  10. /*
  11. * 电话方位:
  12. *
  13. */
  14. tm.getCellLocation();//CellLocation
  15. /*
  16. * 唯一的设备ID:
  17. * GSM手机的 IMEI 和 CDMA手机的 MEID.
  18. * Return null if device ID is not available.
  19. */
  20. tm.getDeviceId();//String
  21. /*
  22. * 设备的软件版本号:
  23. * 例如:the IMEI/SV(software version) for GSM phones.
  24. * Return null if the software version is not available.
  25. */
  26. tm.getDeviceSoftwareVersion();//String
  27. /*
  28. * 手机号:
  29. * GSM手机的 MSISDN.
  30. * Return null if it is unavailable.
  31. */
  32. tm.getLine1Number();//String
  33. /*
  34. * 附近的电话的信息:
  35. * 类型:List<NeighboringCellInfo>
  36. * 需要权限:android.Manifest.permission#ACCESS_COARSE_UPDATES
  37. */
  38. tm.getNeighboringCellInfo();//List<NeighboringCellInfo>
  39. /*
  40. * 获取ISO标准的国家码,即国际长途区号。
  41. * 注意:仅当用户已在网络注册后有效。
  42. *       在CDMA网络中结果也许不可靠。
  43. */
  44. tm.getNetworkCountryIso();//String
  45. /*
  46. * MCC+MNC(mobile country code + mobile network code)
  47. * 注意:仅当用户已在网络注册时有效。
  48. *    在CDMA网络中结果也许不可靠。
  49. */
  50. tm.getNetworkOperator();//String
  51. /*
  52. * 按照字母次序的current registered operator(当前已注册的用户)的名字
  53. * 注意:仅当用户已在网络注册时有效。
  54. *    在CDMA网络中结果也许不可靠。
  55. */
  56. tm.getNetworkOperatorName();//String
  57. /*
  58. * 当前使用的网络类型:
  59. * 例如: NETWORK_TYPE_UNKNOWN  网络类型未知  0
  60. NETWORK_TYPE_GPRS     GPRS网络  1
  61. NETWORK_TYPE_EDGE     EDGE网络  2
  62. NETWORK_TYPE_UMTS     UMTS网络  3
  63. NETWORK_TYPE_HSDPA    HSDPA网络  8
  64. NETWORK_TYPE_HSUPA    HSUPA网络  9
  65. NETWORK_TYPE_HSPA     HSPA网络  10
  66. NETWORK_TYPE_CDMA     CDMA网络,IS95A 或 IS95B.  4
  67. NETWORK_TYPE_EVDO_0   EVDO网络, revision 0.  5
  68. NETWORK_TYPE_EVDO_A   EVDO网络, revision A.  6
  69. NETWORK_TYPE_1xRTT    1xRTT网络  7
  70. */
  71. tm.getNetworkType();//int
  72. /*
  73. * 手机类型:
  74. * 例如: PHONE_TYPE_NONE  无信号
  75. PHONE_TYPE_GSM   GSM信号
  76. PHONE_TYPE_CDMA  CDMA信号
  77. */
  78. tm.getPhoneType();//int
  79. /*
  80. * Returns the ISO country code equivalent for the SIM provider's country code.
  81. * 获取ISO国家码,相当于提供SIM卡的国家码。
  82. *
  83. */
  84. tm.getSimCountryIso();//String
  85. /*
  86. * Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits.
  87. * 获取SIM卡提供的移动国家码和移动网络码.5或6位的十进制数字.
  88. * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
  89. */
  90. tm.getSimOperator();//String
  91. /*
  92. * 服务商名称:
  93. * 例如:中国移动、联通
  94. * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
  95. */
  96. tm.getSimOperatorName();//String
  97. /*
  98. * SIM卡的序列号:
  99. * 需要权限:READ_PHONE_STATE
  100. */
  101. tm.getSimSerialNumber();//String
  102. /*
  103. * SIM的状态信息:
  104. *  SIM_STATE_UNKNOWN          未知状态 0
  105. SIM_STATE_ABSENT           没插卡 1
  106. SIM_STATE_PIN_REQUIRED     锁定状态,需要用户的PIN码解锁 2
  107. SIM_STATE_PUK_REQUIRED     锁定状态,需要用户的PUK码解锁 3
  108. SIM_STATE_NETWORK_LOCKED   锁定状态,需要网络的PIN码解锁 4
  109. SIM_STATE_READY            就绪状态 5
  110. */
  111. tm.getSimState();//int
  112. /*
  113. * 唯一的用户ID:
  114. * 例如:IMSI(国际移动用户识别码) for a GSM phone.
  115. * 需要权限:READ_PHONE_STATE
  116. */
  117. tm.getSubscriberId();//String
  118. /*
  119. * 取得和语音邮件相关的标签,即为识别符
  120. * 需要权限:READ_PHONE_STATE
  121. */
  122. tm.getVoiceMailAlphaTag();//String
  123. /*
  124. * 获取语音邮件号码:
  125. * 需要权限:READ_PHONE_STATE
  126. */
  127. tm.getVoiceMailNumber();//String
  128. /*
  129. * ICC卡是否存在
  130. */
  131. tm.hasIccCard();//boolean
  132. /*
  133. * 是否漫游:
  134. * (在GSM用途下)
  135. */
  136. tm.isNetworkRoaming();//

【很赞的一片文章】android获取手机号码(主要是移动手机)相关推荐

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

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

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

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

  3. Android获取IME,IMSI等各种手机信息,并对号码组成详解

    本文转载自http://www.cnblogs.com/zyw-205520/p/3829119.html 简介: IMSI:international mobiles subscriber iden ...

  4. Android获取手机号码

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

  5. android 获取 imei号码 以及其他手机信息

    核心代码: Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) .getDeviceId(); 1.加入权限 在manife ...

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

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

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

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

  8. android获取路由器ip地址吗,手机查看路由器设置网址(登录IP地址)的方法

    "路由器设置网址是什么?之前修改过路由器的设置网址,现在忘记了是多少,那么此时应该怎么办?"或许大家在使用自家路由器时,遇到了不知道设置网址是多少的问题.下面就来为大家介绍通过手机 ...

  9. android获取Wifi路由地址,手机地址

    WiFiManager .... // 路由地址 wifi.getConnectionInfo().getBSSID(); //路由名称 wifi.getConnectionInfo().getSSI ...

  10. Android获取手机运营商名称

    前言 因为项目中经常会遇到要上传一系列设备信息的功能,为了方便使用,所以就拆分成以下系列文章来单独介绍如何获取各类设备信息 手机运营商获取 AndroidID.IMEI.OAID获取 地理位置信息经纬 ...

最新文章

  1. QML控件拖动并靠边停留
  2. inline修饰虚函数问题
  3. OpenCV2:幼儿园篇 第一章 创建图像并显示
  4. 高速信号传输约翰逊 pdf_高速数字电路仿真设计与测试技术发展趋势综述 (一)...
  5. grootjs 简明教程
  6. 求解数组中子数组连续元素的之和的最大值
  7. python乱码怎么办_python中输出中文乱码怎么解决
  8. Respond.js让IE6-8支持CSS3 Media Query
  9. Windows Phone开发(6):处理屏幕方向的改变 转:http://blog.csdn.net/tcjiaan/article/details/7273107...
  10. 106. 数据库增删改的封装
  11. 从有限状态机(FSM)到行为树(Behavior Tree)(2)
  12. 小猫爪:i.MX RT1050学习笔记24-eDMA之eDMASAIASRC的“纠缠”(RT1170)
  13. 苹果cms模板_万词无限模板站群黑帽SEO利器
  14. 【AIOT】手表调研
  15. 【技术教程】网盘扩容技术原理+爆盘免删修复原理解析!扩容爆盘如何免删修复?
  16. kali Linux的设置和优化(双系统)
  17. 0x7fffffff是多少(也就是INT_MAX,首位是 0,其余都是1,f代表1111)
  18. 深入浅出理解Java并发AQS的共享锁模式
  19. 用Python做数据分析之数据处理及数据提取
  20. 统计给定的n个数中,负数、零和正数的个数

热门文章

  1. 桥牌笔记:机会最多的打法
  2. 2019春季PAT题解
  3. 2019春季高考计算机试题,山东省2019春季高考模拟考试信息技术试试卷+答案(10页)-原创力文档...
  4. 笔记本输字母p出现仅计算机,电脑打不了字只有字母怎么办?最简单的解决方法...
  5. 【python】52周存钱法
  6. 微信开发之测试号申请
  7. Mobile-Former: Bridging MobileNet and Transformer 新的网络结构
  8. 年度最具特色生活类APP
  9. 图片表格如何转换成excel表格
  10. photoshop文字变形教程:奇特的文字变形演示