转载请注明出处: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中。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><LinearLayout android:layout_width="match_parent"android:layout_height="200dip"android:orientation="vertical"><TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="0dip"android:layout_weight="2"android:text="电话号码:" /><Buttonandroid:id="@+id/bt"android:layout_width="match_parent"android:layout_height="0dip"android:layout_weight="1"android:text="获取" /></LinearLayout>
</RelativeLayout>

看代然后我们创建一个类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;}}
}

程序运行结果如下:

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

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

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

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

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

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

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

Android 获取手机号相关推荐

  1. Android 获取手机号及运营商信息

    手 机号码不是所有的都能获取.只是有一部分可以拿到.这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识 别那就是IMSI号码,手机的信号也可以说是通过这个 ...

  2. Android获取手机号归属地

    工程目录: 添加权限: <uses-permission android:name="android.permission.INTERNET"/> Activity p ...

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

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

  4. android 6.0 获取手机号,头条小程序获取手机号码,回调未执行,导致无法获取手机号码...

    获取手机号前需要先登陆 测试正常 HBuilderX 2.1.3 字节跳动开发者工具:1.6.4 基础库:1.24.0.2 ios:12.3.1 头条:7.2.4 抖音:6.8.0 Android:9 ...

  5. android手机如何获取手机号

    两个方案:1 通过android.permission.READ_PHONE_STATE读取  2 通过短信过滤,读取手机号. 按照第1个方案,AndroidManifest.xml需要添加 < ...

  6. android获取imei兼容_Android获取IMEI号码

    1 android 获取 imei号码2 3 核心代码:4 5 Imei =((TelephonyManager) getSystemService(TELEPHONY_SERVICE))6 .get ...

  7. Android 获取通话记录和短信内容

    Android 获取通话记录和短信内容 一.获取通话记录 1.权限声明,需要在Manifest.xml文件中声明权限(读取通话记录权限): <uses-permission android:na ...

  8. WMPF微信小程序框架 微信刷脸登录 获取openId 授权获取手机号 快速接入 快速集成

    官方Demo Github:WMPF微信小程序框架 推荐开发前先快速了解API:wiki 快速接入Demo:WMPF快速接入demo 运行环境下载:WMPF运行环境(待上传) 应⽤版本 刷脸 SDK, ...

  9. Android获取通讯录信息

    Android获取通讯录信息 欢迎关注本人网站:rytter的私人博客网站 权限申请 自Android6.0以后,Android权限申请全部要求为动态申请(注:通讯录权限为危险权限),权限申请方法如下 ...

最新文章

  1. Python的应用及优缺点分析
  2. Android适配华为手机,华为Mate 10将适配Android P 更流畅体验
  3. 同一台机器上安装2个SDE服务
  4. 优秀logo设计解析_优秀Logo设计!字母造型解析
  5. Google学术IP被锁--403
  6. Dom,JQuery
  7. mysql 全连接_mysql 实现全连接
  8. 学习java疯狂讲义笔记(连载)
  9. python tts 离线 linux_ubuntu16.04安装科大讯飞Linux SDK实现离线语音合成(TTS)
  10. 微信小程序 选择器 picker ;demo大全附效果图
  11. 机器人计算机技术,机器人技术与应用
  12. 2837xd代码生成模块学习(3)——IIC、eCAN、SCI、Watchdog、eCAP模块
  13. 实现点击按钮关闭微信小程序功能(附源码)
  14. centos启动卡死进不去界面,停留在started GNOME display manager
  15. 如何使用 DDD 指导微服务拆分?
  16. 京东登陆界面(静态)
  17. STM32CubeMX学习(一) USB HID 双向通信
  18. Java入门教程(视频)
  19. 爬虫入门教程 | 使用selenium爬取微博热门数据
  20. 心脏病最新研究进展2021年4月

热门文章

  1. ai怎么做风景插画?这篇文章告诉你
  2. 2022年软考考试时间
  3. easyUI设置textbox的值
  4. 全球及中国汽车旅游用品行业十四五规划及投资建议报告2022-2028年
  5. 移动端触发touchend后阻止click事件
  6. 卷积计算——1. 关于卷积的基本概念
  7. DHCP和DHCP中继器
  8. android 提示蓝牙无法配对,如何实现android蓝牙开发 自动配对连接,并不弹出提示框...
  9. unity vr是加一个摄像机就行吗_Unity实时光线追踪功能演示项目创作过程
  10. matlab解决迷宫问题,用matlab处理蚂蚁迷宫问题