转载请注明出处: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;@Overrideprotected 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);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (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号码。

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

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

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

更多相关文章

  1. [Android] Android下实现电话号码归属地的查询
  2. Android中如何取得联系人,如何得到一个联系人下面的多个号码
  3. Android实现输入手机号时自动添加空格
  4. Android手机号、串号获取
  5. android 取手机号码
  6. Android 号码查询性能优化
  7. Android 监听短信接收 获取发件号码、短信内容

随机推荐

  1. Android中使用Universal-Image-Loader图
  2. RelativeLayout的16种特有属性
  3. Android(安卓)SDK中国在线更新镜像服务器
  4. Android(安卓)5.1系统禁止通知状态栏下拉
  5. App 权限一点知识
  6. Android(安卓)Map开发基础知识学习笔记(
  7. Android(安卓)AndroidManifest.xml文件的
  8. Android(安卓)搭建环境配置
  9. Android(安卓)Pitfall - Fragment.startA
  10. 获取Android设备电池电量状态