转载请注明出处:http://blog.csdn.net/u013220682/article/details/50945019
最近做了一个业务就是短信支付,其中涉及到获取用户手机号并发送短信。下面我们进入正题,看看我是怎么获取到用户手机号的。
很多人都觉得这个问题Android有自带的API来获取,并没什么疑惑的。确实没错,Android的TelephonyManager有一个方法叫getLine1Number(),官网的解释是Returns the phone number string for line 1, for example, the MSISDN for a GSM phone. Return null if it is unavailable.那么我们看看它到底能不能成功获取到呢?我们看代码:
布局文件activity_main.xml如下,就一个Button和一个TextView,Button点击后获取号码并显示在TextView中。
看代然后我们创建一个类GetPhoneInfo用来获取手机号,代码如下:
package com.wuping.getphoneinfo;
import android.content.Context;
import android.telephony.TelephonyManager;
public class GetPhoneInfo {
private TelephonyManager mTelephonyManager;
private Context mContext;
public GetPhoneInfo(Context pContext) {
mContext = pContext;
mTelephonyManager = (TelephonyManager) pContext.getSystemService(Context.TELEPHONY_SERVICE);
}
public String getNativePhoneNumber(){
String nativePhoneNumber = "";
nativePhoneNumber = mTelephonyManager.getLine1Number();
if("".equals(nativePhoneNumber) || nativePhoneNumber == null) {
nativePhoneNumber = "未获取到该号码";
}
return nativePhoneNumber;
}
}
我们看看MainActivity的代码:
public class MainActivity extends ActionBarActivity implements OnClickListener{
private TextView tv;
private Button bt;
private GetPhoneInfo getPhoneInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)findViewById(R.id.tv);
bt = (Button)findViewById(R.id.bt);
getPhoneInfo = new GetPhoneInfo(this);
bt.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.bt:
String number = tv.getText().toString() + getPhoneInfo.getNativePhoneNumber();
tv.setText(number);
break;
default:
break;
}
}
}
程序运行结果如下:
其实我查过很多资料发现,这个方法其实获取手机号不一定能获取到。
网上有资料说原因好像是:
手机号码不是所有的都能获取。只是有一部分可以拿到(目前我是没有拿到过)。这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM卡丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。
那么我们怎么解决这个问题呢?
我是这样处理的,我们公司跟移动有合作,所以我们有移动分配的号码。我们手机发送短信到这个号码,那么移动就会通知我们某某手机号给我们发送某信息了。于是我们能够从短信下行内容就知道该用户的手机号了。然后通过后台储存并告诉前端,这样我们就间接的拿到了手机号。
此次内容供大家讨论,欢迎大家分享出更好的获取手机号的方法,谢谢。