Android编程获取手机的IMEI

 

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

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

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

二、经过上下文设备获取到TelephonyManager实例,调用getDeviceId方法获取IMEI:
import android.telephony.*;  
……
TelephonyManager telephonyManager=(TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String imei=telephonyManager.getDeviceId();

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

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

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

       

      public class BasicInfo {ui

       

      public String getPhoneNumber()this

      {spa

      // 获取手机号 MSISDN,极可能为空操作系统

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

      StringBuffer inf = new StringBuffer();code

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

              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();

       

      问题解决。。。

相关文章
相关标签/搜索