Android 获取手机号

转载请注明出处: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;
		}
	}
}
程序运行结果如下: Android 获取手机号_第1张图片

我试了好几次都是这样,始终获取不到,这是为什么呢?

其实我查过很多资料发现,这个方法其实获取手机号不一定能获取到。

网上有资料说原因好像是:

手机号码不是所有的都能获取。只是有一部分可以拿到(目前我是没有拿到过)。这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM卡丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。

那么我们怎么解决这个问题呢?

我是这样处理的,我们公司跟移动有合作,所以我们有移动分配的号码。我们手机发送短信到这个号码,那么移动就会通知我们某某手机号给我们发送某信息了。于是我们能够从短信下行内容就知道该用户的手机号了。然后通过后台储存并告诉前端,这样我们就间接的拿到了手机号。

此次内容供大家讨论,欢迎大家分享出更好的获取手机号的方法,谢谢。

你可能感兴趣的:(Android)