Android編程獲取手機的IMEI


手機在生產時,每部手機均有一個唯一的標識(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();

       

      問題解決。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM