从技术层面而言,手机的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与手机号绑定 。
如何在Android上获取本机电话号码,目前Android上提供了一个API可以读取早期SIM卡上固化的号码,
[Java] 纯文本查看 复制代码 private String getPhoneNumber(){
TelephonyManager mTelephonyMgr;
mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
return mTelephonyMgr.getLine1Number();
}
上面的getPhoneNumber方法返回当前手机的电话号码,同时必须在androidmanifest.xml中加入 android.permission.READ_PHONE_STATE 这个权限,但是提示大家上面的方法只能获取很老SIM卡的手机号码,
目前主流的获取用户手机号码方法:
1.一般采用用户主动发送短信到SP或接收手机来获取。
2.通过走WAP网关获取. |