下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码

准备条件:一部安卓手机、手机SIM卡确保插入手机里、eclipse ADT和android-sdk开发环境

第一步:新建一个android工程(JinshanTest),

并需要在工程的AndroidManifest.xml文件中,添加权限

图例:

第二步:新建一个工具类PhoneInfo.java

packagecom.jinshan.test;

importandroid.content.Context;

importandroid.telephony.TelephonyManager;

/**

* 读取手机设备信息测试代码

* http://www.souapp.com 搜应用网

* song2c@163.com

* 宋立波

*/

publicclassPhoneInfo {

privateTelephonyManager telephonyManager;

/**

* 国际移动用户识别码

*/

privateString IMSI;

privateContext cxt;

publicPhoneInfo(Context context) {

cxt=context;

telephonyManager = (TelephonyManager) context

.getSystemService(Context.TELEPHONY_SERVICE);

}

/**

* 获取电话号码

*/

publicString getNativePhoneNumber() {

String NativePhoneNumber=null;

NativePhoneNumber=telephonyManager.getLine1Number();

returnNativePhoneNumber;

}

/**

* 获取手机服务商信息

*/

publicString getProvidersName() {

String ProvidersName ="N/A";

try{

IMSI = telephonyManager.getSubscriberId();

// IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。

System.out.println(IMSI);

if(IMSI.startsWith("46000") || IMSI.startsWith("46002")) {

ProvidersName ="中国移动";

}elseif(IMSI.startsWith("46001")) {

ProvidersName ="中国联通";

}elseif(IMSI.startsWith("46003")) {

ProvidersName ="中国电信";

}

}catch(Exception e){

e.printStackTrace();

}

returnProvidersName;

}

publicString  getPhoneInfo(){

TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);

StringBuilder sb =newStringBuilder();

sb.append("\nDeviceId(IMEI) = "+ tm.getDeviceId());

sb.append("\nDeviceSoftwareVersion = "+ tm.getDeviceSoftwareVersion());

sb.append("\nLine1Number = "+ tm.getLine1Number());

sb.append("\nNetworkCountryIso = "+ tm.getNetworkCountryIso());

sb.append("\nNetworkOperator = "+ tm.getNetworkOperator());

sb.append("\nNetworkOperatorName = "+ tm.getNetworkOperatorName());

sb.append("\nNetworkType = "+ tm.getNetworkType());

sb.append("\nPhoneType = "+ tm.getPhoneType());

sb.append("\nSimCountryIso = "+ tm.getSimCountryIso());

sb.append("\nSimOperator = "+ tm.getSimOperator());

sb.append("\nSimOperatorName = "+ tm.getSimOperatorName());

sb.append("\nSimSerialNumber = "+ tm.getSimSerialNumber());

sb.append("\nSimState = "+ tm.getSimState());

sb.append("\nSubscriberId(IMSI) = "+ tm.getSubscriberId());

sb.append("\nVoiceMailNumber = "+ tm.getVoiceMailNumber());

returnsb.toString();

}

}

package com.jinshan.test;

import android.content.Context;

import android.telephony.TelephonyManager;

/**

* 读取手机设备信息测试代码

* http://www.souapp.com 搜应用网

* song2c@163.com

* 宋立波

*/

public class PhoneInfo {

private TelephonyManager telephonyManager;

/**

* 国际移动用户识别码

*/

private String IMSI;

private Context cxt;

public PhoneInfo(Context context) {

cxt=context;

telephonyManager = (TelephonyManager) context

.getSystemService(Context.TELEPHONY_SERVICE);

}

/**

* 获取电话号码

*/

public String getNativePhoneNumber() {

String NativePhoneNumber=null;

NativePhoneNumber=telephonyManager.getLine1Number();

return NativePhoneNumber;

}

/**

* 获取手机服务商信息

*/

public String getProvidersName() {

String ProvidersName = "N/A";

try{

IMSI = telephonyManager.getSubscriberId();

// IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。

System.out.println(IMSI);

if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) {

ProvidersName = "中国移动";

} else if (IMSI.startsWith("46001")) {

ProvidersName = "中国联通";

} else if (IMSI.startsWith("46003")) {

ProvidersName = "中国电信";

}

}catch(Exception e){

e.printStackTrace();

}

return ProvidersName;

}

public String getPhoneInfo(){

TelephonyManager tm = (TelephonyManager)cxt.getSystemService(Context.TELEPHONY_SERVICE);

StringBuilder sb = new StringBuilder();

sb.append("\nDeviceId(IMEI) = " + tm.getDeviceId());

sb.append("\nDeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion());

sb.append("\nLine1Number = " + tm.getLine1Number());

sb.append("\nNetworkCountryIso = " + tm.getNetworkCountryIso());

sb.append("\nNetworkOperator = " + tm.getNetworkOperator());

sb.append("\nNetworkOperatorName = " + tm.getNetworkOperatorName());

sb.append("\nNetworkType = " + tm.getNetworkType());

sb.append("\nPhoneType = " + tm.getPhoneType());

sb.append("\nSimCountryIso = " + tm.getSimCountryIso());

sb.append("\nSimOperator = " + tm.getSimOperator());

sb.append("\nSimOperatorName = " + tm.getSimOperatorName());

sb.append("\nSimSerialNumber = " + tm.getSimSerialNumber());

sb.append("\nSimState = " + tm.getSimState());

sb.append("\nSubscriberId(IMSI) = " + tm.getSubscriberId());

sb.append("\nVoiceMailNumber = " + tm.getVoiceMailNumber());

return sb.toString();

}

}

第三步:在启动的Activity,JinshanTestActivity中添加,调用代码:

packagecom.jinshan.test;

importandroid.app.Activity;

importandroid.os.Bundle;

publicclassJinshanTestActivityextendsActivity {

/** Called when the activity is first created. */

@Override

publicvoidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

PhoneInfo siminfo =newPhoneInfo(JinshanTestActivity.this);

System.out.println("getProvidersName:"+siminfo.getProvidersName());

System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());

System.out.println("------------------------");

System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());

}

}

package com.jinshan.test;

import android.app.Activity;

import android.os.Bundle;

public class JinshanTestActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

PhoneInfo siminfo = new PhoneInfo(JinshanTestActivity.this);

System.out.println("getProvidersName:"+siminfo.getProvidersName());

System.out.println("getNativePhoneNumber:"+siminfo.getNativePhoneNumber());

System.out.println("------------------------");

System.out.println("getPhoneInfo:"+siminfo.getPhoneInfo());

}

}

第四步,把手机使用USB线,连接到电脑上,确保是连通性,开始运行工程

最后,我们看LOGCAT日志,结果如下:

------------------------------------------------------------

04-01 16:20:57.105: I/System.out(952): 460003121934674

04-01 16:20:57.105: I/System.out(952): getProvidersName:中国移动

04-01 16:20:57.115: I/System.out(952): getNativePhoneNumber:136XXXXXXX

04-01 16:20:57.115: I/System.out(952): ------------------------

04-01 16:20:57.145: I/System.out(952): getPhoneInfo:

04-01 16:20:57.145: I/System.out(952): DeviceId(IMEI) = 352XXXXXXXX61328

04-01 16:20:57.145: I/System.out(952): DeviceSoftwareVersion = 01

04-01 16:20:57.145: I/System.out(952): Line1Number = 136XXXXXXX

04-01 16:20:57.145: I/System.out(952): NetworkCountryIso = cn

04-01 16:20:57.145: I/System.out(952): NetworkOperator = 46000

04-01 16:20:57.145: I/System.out(952): NetworkOperatorName = 中国移动

04-01 16:20:57.145: I/System.out(952): NetworkType = 2

04-01 16:20:57.145: I/System.out(952): PhoneType = 1

04-01 16:20:57.145: I/System.out(952): SimCountryIso = cn

04-01 16:20:57.145: I/System.out(952): SimOperator = 46000

04-01 16:20:57.145: I/System.out(952): SimOperatorName = CMCC

04-01 16:20:57.145: I/System.out(952): SimSerialNumber = 898xxxxxx90108

04-01 16:20:57.145: I/System.out(952): SimState = 5

04-01 16:20:57.145: I/System.out(952): SubscriberId(IMSI) = 46000xxxxxxxx4674

那么我们来解释一下上面的信息具体代表啥意思。

getNativePhoneNumber获取的手机号

DeviceId(IMEI)手机 国际移动用户识别码

NetworkOperator 移动运营商编号

NetworkOperatorName 移动运营商名称

SimSerialNumber  SimOperator  SimCountryIso  SimSerialNumber  SubscriberId(IMSI)   关于手机SIM卡的一些详细信息

其实代码中没有写 获取System.ANDROID_ID这个操作,因为很多手机设备获取不到andnroid_id

当然了,我们今天主要讲述 光使用这个权限我们可以获得的手机设备信息和手机号

如果想获得WIFI,蓝牙,GPS,读写SDCARD更多的信息,就需要添加其它的权限。

此外,本次测试我拿自己的手机SIM卡测试是可以获取到手机号码的,当然了有些手机号码是获取不到的,这里也给大家罗列了原因,

手机号码不是所有的都能获取。只是有一部分可以拿到。

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

那么手机号为什么有的就能显示呢?

这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。

对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因条件不同而不同。

如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能。

移动神州行,联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.

能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的。

android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例 .相关推荐

  1. android 安卓APP获取手机设备信息和手机号码的代码示例

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  2. android app 手机号码,android 安卓APP获取手机设备信息和手机号码的代码示例

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和android-sdk开发环境 第一步:新建一个andro ...

  3. 如何获取手机设备信息和手机号码

    下面我从安卓开发的角度,简单写一下如何获取手机设备信息和手机号码 准备条件:一部安卓手机.手机SIM卡确保插入手机里.eclipse ADT和Android-sdk开发环境 第一步:新建一个andro ...

  4. Android中获取手机设备信息、RAM、ROM存储信息,如宽、高、厂商名、手机品牌

    借鉴:https://www.jianshu.com/p/ca869aa2fd72 今天有两个工具类总结,代码里都有注释,直接看代码. 一.首先第一个,主要获取手机设备信息DeviceInfoUtil ...

  5. js获取PC设备信息,js获取手机设备信息,最全

    获取设备系统和型号<封装方法> <!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...

  6. Android 获取app 地址,获取手机设备信息、app版本信息、ip地址

    获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 获取当前运行环境信息.与其它程序进行通讯等.通过plus.runtime可获取运行环境管理 ...

  7. html5 手机 消息,H5获取手机设备信息、app版本信息、ip地址

    获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 获取当前运行环境信息.与其它程序进行通讯等.通过plus.runtime可获取运行环境管理 ...

  8. android手机获取手机设备信息

    在有的项目中需要根据特定的手机信息来进行处理,这时就需要我们来获取手机的设备信息了,那首先看看我的测试机的一些基本信息: 那么这些信息怎么获得呢??其实都封装在了TelephonyManager中,我 ...

  9. Android获取手机设备信息并区分真机与模拟器

    有些时候我们不想App在模拟器上被别人使用,所以我们禁止在模拟器上使用App 判断是否为真机: 根据以下四图,我们可以对真机与模拟器来做一个简单区分: 如果Serial码为unkonwn或者andro ...

最新文章

  1. navicat for mysql收藏夹
  2. R语言与数据分析(1) 数据分析流程、数据挖掘、数据可视化
  3. php禁止伪造_php防止伪造的数据从URL提交方法
  4. CentOS 7核心安装及基本配置
  5. mysql数据库系统配置文件_跟我学虚拟机系统平台相关技术及应用——在CentOS系统中的MySql数据库系统配置文件中进行配置定义...
  6. android 屏幕禁止,Android应用禁止屏幕休眠的几种方法
  7. 解决error 1045: Access denied for user: 'root@localhost' (Using password: YES)
  8. office 高效办公智慧树_干货高效实用的office办公小技巧之word篇
  9. nssl1489-大冰隙2【树链剖分,线段树】
  10. 简述C++程序编写的过程
  11. 锐驰机器人的市场_【年终盘点】2020年,锐驰的王炸新品!
  12. 饼图大小调整_这么漂亮的双层饼图,你会做吗?让你工作汇报更出彩!
  13. X命名空间-标记扩展
  14. cshop是什么开发语言_C语言是用什么语言编写出来的?
  15. less中mixins与extend的区别
  16. ios keychain 不被清理_限免 | 可爱天气 清理君等等
  17. 评价——秩和比综合评价
  18. 编辑器漏洞、越权、逻辑漏洞(不安全的对象引用、功能级别访问控制缺失)
  19. 在线世界地图生成器 pixelmap可调色
  20. 基于法律裁判文书的法律判决大数据预测

热门文章

  1. 三个老牌云渲染农场效果图渲染谁便宜?
  2. 化妆品行业APS解决方案
  3. PPT 填充透明度,设计窗格在哪?
  4. 视频技术处理之javaCV视频图像灰度处理,附代码
  5. Hybrid技术简介
  6. 前端缓存 (http缓存 与 本地缓存)
  7. c++ allocator类
  8. 各种视频监控上墙方案的比较
  9. 关于Java里面的String.getBytes()方法
  10. java 调用controller_java调用controller方法