手机在生产时,每部手机均有一个唯一的标识(ID),国际上采用国际移动设备身份码(IMEI, International Mobile Equipment Identity)。IMEI是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。

在手机应用开发中,使用IMEI来做身份认证是一个常用的技术手段,在Android SDK中,类android.telephony.TelephonyManager提供了手机设备信息的相关操作和管理。

1、在AndroidManifest.xml中增加访问设备状态的权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2、通过上下文设备获取到TelephonyManager实例,调用getDeviceId方法获取IMEI:

import android.telephony.*;  
……
TelephonyManager telephonyManager=(TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String imei=telephonyManager.getDeviceId();

值得说明的是,在模拟器中运行时,getDeviceId方法返回总是000000000000000。

另外,TelephonyManager类还提供了获取手机其他信息的方法,如:

    • getLine1Number():获取到手机号码;
    • getDeviceSoftwareVersion:获取到Android操作系统的版本;
    • getSimSerialNumber:获取到SIM卡唯一编号ID;
    • getSubscriberId:获取到客户ID,即IMSI;
    • Android 获取手机信息的时候用到这样一段代码:

      public class BasicInfo {

      public String getPhoneNumber()

      {

      // 获取手机号 MSISDN,很可能为空

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

      StringBuffer inf = new StringBuffer();

      switch(tm.getSimState()){ //getSimState()取得sim的状态  有下面6中状态

      case TelephonyManager.SIM_STATE_ABSENT :inf.append("无卡");return inf.toString();

      case TelephonyManager.SIM_STATE_UNKNOWN :inf.append("未知状态");return inf.toString();

      case TelephonyManager.SIM_STATE_NETWORK_LOCKED :inf.append("需要NetworkPIN解锁");return inf.toString();

      case TelephonyManager.SIM_STATE_PIN_REQUIRED :inf.append("需要PIN解锁");return inf.toString();

      case TelephonyManager.SIM_STATE_PUK_REQUIRED :inf.append("需要PUK解锁");return inf.toString();

      case TelephonyManager.SIM_STATE_READY :break;

      }

      String phoneNumber = tm.getLine1Number();

      return phoneNumber;

      }

      ......

      }

      在另外一个activity类里面调用的时候 总是出现进程关闭 无法获取手机信息。

      后来发现

      getSystemService这个方法基于context,只有存在TextView控件的窗体中这个方法才会被激活~

      于是:

      1.

      给BasicInfo 添加一个带参数Context的构造函数:

      public BasicInfo (Context context)

      {

      this.context = context;

      }

      2.

      getPhoneNumber()函数里面改成:

      context.getSystemService(Context.TELEPHONY_SERVIC);

      3.

      在调用类里面 BasicInfo bi = new BasicInfo(this);

      bi.getPhoneNumber();

      问题解决。。。

Android编程获取手机的IMEI的更多相关文章

  1. Android编程获取手机型号,本机电话号码,sdk版本号及firmware版本号号(即系统版本号号)

    Android开发平台中,可通过TelephonyManager 获取本机号码. TelephonyManager phoneMgr=(TelephonyManager)this.getSystemS ...

  2. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面

    随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityManager  类,用 ...

  3. Android编程 获取网络连接状态 及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  4. Android编程获取网络连接状态及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  5. android如何获取手机型号和版本号

    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView ...

  6. Android中获取手机电量信息

    有些时候我们需要在我们的应用上为用户展示当前手机的电量,这时候我们就需要用到广播了,我们都知道在动态注册广播的时候,我们需要传入一个BroadcastReceiver类对象,还有一个意图过滤器Inte ...

  7. Android之——获取手机安装的应用程序

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47114331 前几篇有关Android的博文中.向大家介绍了几个项目中经常使用的有 ...

  8. 【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

    众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 PackageManager packageManager = this.getPackageManag ...

  9. android平台获取手机IMSI,IMEI ,序列号,和 手机号的方法

    1)获取运营商sim卡imsi号, String IMSI =android.os.SystemProperties.get( android.telephony.TelephonyPropertie ...

随机推荐

  1. Android 短信模块分析(四) MMS之短信的发送与接收

     MMS之短信的发送与接收分析: 一.信息发送: com.android.mms.data.WorkingMessage.java 类 send()函数: public void send() { . ...

  2. 《Head First Python》学习笔记 01

    Python 3提供了70多个内建函数,这是Python“功能齐全”的观点:Python已经包含足够多的内置功能,使你能完成大多数工作,而不必依赖第三方代码. Python 列表: Python列表是 ...

  3. oracle保证读一致性原理

    35 这里也有讲解 1:undo segment的概念 当数据库进行修改的时候,需要把保存到以前的old的数据保存到一个地方,然后进行修改,用于保存old数据的segment 就是undo segme ...

  4. C语言实现修改文本文件中的特定行

         最近由于项目需要实现修改文件的功能,所以,博主认真查阅了一些资料,但是,很遗憾,并没有太多的收获. 好的,首先我先叙述下功能要求: 其实很简单,就是Shell中sed命令的C语言实现,实现定 ...

  5. kubernetes入门之skydns

    部署kubernetes dns服务 kubernetes可以为pod提供dns内部域名解析服务.其主要作用是为pod提供可以直接通过service的名字解析为对应service的ip的功能. 部署k ...

  6. 快速上手微信小程序-快递100

    2007 年 1 月 9 日,乔布斯在旧金山莫斯科尼会展中心发布了首款 iPhone,而在十年后的 1 月 9 日,微信小程序正式上线.张小龙以这样的形式,向乔布斯致敬. 小程序在哪里? 小程序功能模 ...

  7. [ios2]ios系统中各种设置项的url链接

    在代码中调用如下代码:(ps: ios 5.0 以后不可用)NSURL*url=[NSURL URLWithString:@"prefs:root=WIFI"];[[UIAppli ...

  8. Windows 8 卡在正在检查更新

    原文地址:https://answers.microsoft.com/en-us/windows/forum/windows_8-update/windows-update-not-updating- ...

  9. rabbitMQ 安装 could not set correct interactive mode

    安装rabbit mq 提示下面错误 其他信息: 执行错误:C:\Program Files\erl6.0\erts-6.0\bin\erlsrv: Warning, could not set co ...

  10. 回家(洛谷 P1592)

    模板题.. 传送门:codevs 1079 思路 :以 Z 为起点 直接跑一边SPFA , 看哪一头母牛距离Z点最近 , 最后找出Z 到 A~Y 的最短路 (因为仅有A~Z有奶牛) #include ...