android 擷取imei(國際行動裝置身份碼)號碼詳解及其應用情境

來源:互聯網
上載者:User

IMEI簡介:

IMEI(International Mobile Equipment Identity)是國際行動裝置身份碼的縮寫,國際移動裝備辨識碼,是由15位元字組成的"電子串號",它與每台手機一一對應,而且該碼是全世界唯一的。每一隻手機在組裝完成後都將被賦予一個全球唯一的一組號碼,這個號碼從生產到交付使用都將被製造生產的廠商所記錄。

IMEI俗稱“串號”,儲存在手機的EEPROM(俗稱“碼片”)裡,熟悉並瞭解這個號碼對我們今後識別手機會起到非常大的作用。首先TAC碼(IMEI的前六位元字)前三位在不同的時期會發生變化,過去的TAC碼前三位在現在的手機上不會出現。過去的一些老型號的手機基本上都是446/448開頭,如moto v328 nokia 7110,而且即使同一部手機在不同的時期也會有不同的TAC碼,如大家最熟悉的8210升級8250。如果前三位是448902就不能升級,因為CPU不同。因此過去所說的只要是同一型號的手機TAC碼一定一樣的說法是不夠準確的,再如愛立信的同一型號手機T39MC在不同地區的地方亦會有不同的號碼:大陸行貨為520406,香港則為520407。我們知道這些區別後就可以通過TAC碼來進行“裝置識別”了,而不必去費心的去牢記IMEI的七、八位元字代表的產地。

IMEI分配:

IMEI碼由GSM(全球移動通訊協會)統一分配,授權BABT(英國通訊認證管理委員會)審受

IMEI的組成:

IMEI由15位元字組成,其組成為:  1、前6位元(TAC,Type Approval Code)是"型號核准號碼",一般代表機型

2、接著的2位元(FAC,Final Assembly Code)是"最後裝配號",一般代表產地

3、之後的6位元(SNR)是"串號",一般代表生產順序號

4、最後1位元(SP)通常是"0",為檢驗碼,目前暫備用。

IMEI碼具有唯一性,貼在手機背面的標誌上,並且讀寫於手機記憶體中。它也是該手機在廠家的"檔案"和"社會安全號碼"。

應用情境:

我們在應用程式需要對使用者提交的資訊加密時,由於手機的IMEI號碼是唯一的(相當於身份證或者指紋的作用),所以我們進行加密的時候可以在需要加密的資訊後加上手機的IMEI號碼,從而加大演算法的複雜度.

android 擷取 imei號碼

核心代碼:

Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
.getDeviceId();

1.加入許可權

在manifest.xml檔案中要添加:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2.代碼

    /**       *       *    *       */        package net.sunniwell.app;         import android.app.Activity;         import android.os.Bundle;         import android.telephony.CellLocation;         import android.telephony.PhoneStateListener;         import android.telephony.TelephonyManager;         public class TelManager extends Activity {                 @Override        protected void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);                      /*          * 電話狀態:          * 1.tm.CALL_STATE_IDLE=0          無活動          * 2.tm.CALL_STATE_RINGING=1  響鈴          * 3.tm.CALL_STATE_OFFHOOK=2  摘機          */          tm.getCallState();//int                      /*          * 電話方位:          *           */          tm.getCellLocation();//CellLocation                      /*          * 唯一的裝置ID:          * GSM手機的 IMEI 和 CDMA手機的 MEID.           * Return null if device ID is not available.          */          tm.getDeviceId();//String                      /*          * 裝置的軟體版本號碼:          * 例如:the IMEI/SV(software version) for GSM phones.          * Return null if the software version is not available.           */          tm.getDeviceSoftwareVersion();//String                      /*          * 手機號:          * GSM手機的 MSISDN.          * Return null if it is unavailable.           */          tm.getLine1Number();//String                      /*          * 附近的電話的資訊:          * 類型:List<NeighboringCellInfo>           * 需要許可權:android.Manifest.permission#ACCESS_COARSE_UPDATES          */          tm.getNeighboringCellInfo();//List<NeighboringCellInfo>                      /*          * 擷取ISO標準的國家碼,即國際長途區號。          * 注意:僅當使用者已在網路註冊後有效。          *       在CDMA網路中結果也許不可靠。          */          tm.getNetworkCountryIso();//String                      /*          * MCC+MNC(mobile country code + mobile network code)          * 注意:僅當使用者已在網路註冊時有效。          *    在CDMA網路中結果也許不可靠。          */          tm.getNetworkOperator();//String                      /*          * 按照字母次序的current registered operator(當前已註冊的使用者)的名字          * 注意:僅當使用者已在網路註冊時有效。          *    在CDMA網路中結果也許不可靠。          */          tm.getNetworkOperatorName();//String                      /*          * 當前使用的網路類型:          * 例如: NETWORK_TYPE_UNKNOWN  網路類型未知  0            NETWORK_TYPE_GPRS     GPRS網路  1            NETWORK_TYPE_EDGE     EDGE網路  2            NETWORK_TYPE_UMTS     UMTS網路  3            NETWORK_TYPE_HSDPA    HSDPA網路  8             NETWORK_TYPE_HSUPA    HSUPA網路  9            NETWORK_TYPE_HSPA     HSPA網路  10            NETWORK_TYPE_CDMA     CDMA網路,IS95A 或 IS95B.  4            NETWORK_TYPE_EVDO_0   EVDO網路, revision 0.  5            NETWORK_TYPE_EVDO_A   EVDO網路, revision A.  6            NETWORK_TYPE_1xRTT    1xRTT網路  7          */          tm.getNetworkType();//int                      /*          * 手機類型:          * 例如: PHONE_TYPE_NONE  無訊號            PHONE_TYPE_GSM   GSM訊號            PHONE_TYPE_CDMA  CDMA訊號          */          tm.getPhoneType();//int                      /*          * Returns the ISO country code equivalent for the SIM provider's country code.          * 擷取ISO國家碼,相當於提供SIM卡的國家碼。          *           */          tm.getSimCountryIso();//String                      /*          * Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits.          * 擷取SIM卡提供的移動國家碼和移動網路碼.5或6位的十進位數字.          * SIM卡的狀態必須是 SIM_STATE_READY(使用getSimState()判斷).          */          tm.getSimOperator();//String                      /*          * 服務商名稱:          * 例如:中國移動、聯通          * SIM卡的狀態必須是 SIM_STATE_READY(使用getSimState()判斷).          */          tm.getSimOperatorName();//String                      /*          * SIM卡的序號:          * 需要許可權:READ_PHONE_STATE          */          tm.getSimSerialNumber();//String                      /*          * SIM的狀態資訊:          *  SIM_STATE_UNKNOWN          未知狀態 0          SIM_STATE_ABSENT           沒插卡 1          SIM_STATE_PIN_REQUIRED     鎖定狀態,需要使用者的數字 PIN 碼解鎖 2          SIM_STATE_PUK_REQUIRED     鎖定狀態,需要使用者的PUK碼解鎖 3          SIM_STATE_NETWORK_LOCKED   鎖定狀態,需要網路的數字 PIN 碼解鎖 4          SIM_STATE_READY            就緒狀態 5          */          tm.getSimState();//int                      /*          * 唯一的使用者ID:          * 例如:IMSI(國際移動使用者識別碼) for a GSM phone.          * 需要許可權:READ_PHONE_STATE          */          tm.getSubscriberId();//String                      /*          * 取得和語音信箱相關的標籤,即為識別符          * 需要許可權:READ_PHONE_STATE          */          tm.getVoiceMailAlphaTag();//String                      /*          * 擷取語音信箱號碼:          * 需要許可權:READ_PHONE_STATE          */          tm.getVoiceMailNumber();//String                      /*          * ICC卡是否存在          */          tm.hasIccCard();//boolean                      /*          * 是否漫遊:          * (在GSM用途下)          */          tm.isNetworkRoaming();//                                          }                         }  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.