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();
問題解決。。。