android讀取sim卡資訊
阿新 • • 發佈:2018-12-30
package com.water.activity;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.telephony.CellLocation;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
import android.util.Log;
public class MyList extends Activity {
/**
* android API中的TelephonyManager物件,可以取得SIM卡中的資訊
*/
private TelephonyManager telMgr;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
telMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if (telMgr.getSimState() == telMgr.SIM_STATE_READY) {
Log.i("MyList", "良好");
} else if (telMgr.getSimState() == telMgr.SIM_STATE_ABSENT) {
Log.i("MyList", "無SIM卡");
} else {
Log.i("MyList", "SIM卡被鎖定或未知的狀態");
}
Log.i("MyList" , "電話狀態[0 無活動/1 響鈴/2 摘機]:" + getCallState());
Log.i("MyList", "電話方位:" + getCellLocation());
Log.i("MyList", "唯一的裝置ID:" + getDeviceId());
Log.i("MyList", "裝置的軟體版本號:" + getDeviceSoftwareVersion());
Log.i("MyList", "手機號:" + getLine1Number());
Log.i("MyList", "附近的電話的資訊:" + getNeighboringCellInfo());
Log.i("MyList", "獲取ISO標準的國家碼,即國際長途區號:" + getNetworkCountryIso());
Log.i("MyList", "MCC+MNC:" + getNetworkOperator());
Log.i("MyList", "(當前已註冊的使用者)的名字:" + getNetworkOperatorName());
Log.i("MyList", "當前使用的網路型別:" + getNetworkType());
Log.i("MyList", "手機型別:" + getPhoneType());
Log.i("MyList", "SIM卡的國家碼:" + getSimCountryIso());
Log.i("MyList", "獲取SIM卡提供的移動國家碼和行動網路碼.5或6位的十進位制數字:" + getSimOperator());
Log.i("MyList", "服務商名稱:" + getSimOperatorName());
Log.i("MyList", "SIM卡的序列號:" + getSimSerialNumber());
Log.i("MyList", "SIM的狀態資訊:" + getSimState());
Log.i("MyList", "唯一的使用者ID:" + getSubscriberId());
Log.i("MyList", "取得和語音郵件相關的標籤,即為識別符:" + getVoiceMailAlphaTag());
Log.i("MyList", "獲取語音郵件號碼:" + getVoiceMailNumber());
Log.i("MyList", "ICC卡是否存在:" + hasIccCard());
Log.i("MyList", "是否漫遊:" + isNetworkRoaming());
Log.i("MyList", "獲取資料活動狀態:" + getDataActivity());
Log.i("MyList", "獲取資料連線狀態:" + getDataState());
// telMgr.listen(PhoneStateListener listener, int events) ;
// 解釋:
// IMSI是國際移動使用者識別碼的簡稱(International Mobile Subscriber Identity)
// IMSI共有15位,其結構如下:
// MCC+MNC+MIN
// MCC:Mobile Country Code,移動國家碼,共3位,中國為460;
// MNC:Mobile NetworkCode,行動網路碼,共2位
// 在中國,移動的程式碼為電00和02,聯通的程式碼為01,電信的程式碼為03
// 合起來就是(也是Android手機中APN配置檔案中的程式碼):
// 中國移動:46000 46002
// 中國聯通:46001
// 中國電信:46003
// 舉例,一個典型的IMSI號碼為460030912121001
// IMEI是International Mobile Equipment Identity (國際移動裝置標識)的簡稱
// IMEI由15位數字組成的”電子串號”,它與每臺手機一一對應,而且該碼是全世界唯一的
// 其組成為:
// 1. 前6位數(TAC)是”型號核准號碼”,一般代表機型
// 2. 接著的2位數(FAC)是”最後裝配號”,一般代表產地
// 3. 之後的6位數(SNR)是”串號”,一般代表生產順序號
// 4. 最後1位數(SP)通常是”0″,為檢驗碼,目前暫備用
}
/**
* 電話狀態:<br/>
* CALL_STATE_IDLE 無任何狀態時<br/>
* CALL_STATE_OFFHOOK 接起電話時<br/>
* CALL_STATE_RINGING 電話進來時
*
* @return
*/
private int getCallState() {
return telMgr.getCallState();
}
/**
* 返回當前移動終端的位置 <br/>
*
* @return
*/
private CellLocation getCellLocation() {
CellLocation location = telMgr.getCellLocation();
// 請求位置更新,如果更新將產生廣播,接收物件為註冊LISTEN_CELL_LOCATION的物件,需要的permission名稱為ACCESS_COARSE_LOCATION。
// location.requestLocationUpdate();
return location;
}
/**
* 唯一的裝置ID:<br/>
* 如果是GSM網路,返回IMEI;如果是CDMA網路,返回MEID<br/>
* 需要許可權:android.permission.READ_PHONE_STATE
*
* @return null if device ID is not available.
*/
private String getDeviceId() {
return telMgr.getDeviceId();
}
/**
* 返回移動終端的軟體版本:<br/>
* 例如:GSM手機的IMEI/SV碼。<br/>
*
* @return null if the software version is not available.
*/
private String getDeviceSoftwareVersion() {
return telMgr.getDeviceSoftwareVersion();
}
/**
* 手機號:<br/>
* 對於GSM網路來說即MSISDN
*
* @return null if it is unavailable.
*/
private String getLine1Number() {
return telMgr.getLine1Number();
}
/**
* 返回當前移動終端附近移動終端的資訊:<br/>
* 型別:List<NeighboringCellInfo><br/>
* 需要許可權:android.Manifest.permission#ACCESS_COARSE_UPDATES
*
* @return
*/
private List<NeighboringCellInfo> getNeighboringCellInfo() {
// List<NeighboringCellInfo> infos = telMgr.getNeighboringCellInfo();
// for (NeighboringCellInfo info : infos) {
// // 獲取鄰居小區號
// int cid = info.getCid();
//
// // 獲取鄰居小區LAC,LAC:
// // 位置區域碼。為了確定移動臺的位置,每個GSM/PLMN的覆蓋區都被劃分成許多位置區,LAC則用於標識不同的位置區。
// info.getLac();
// info.getNetworkType();
// info.getPsc();
//
// // 獲取鄰居小區訊號強度
// info.getRssi();
// }
return telMgr.getNeighboringCellInfo();
}
/**
* 獲取ISO標準的國家碼,即國際長途區號。<br/>
* 注意:僅當用戶已在網路註冊後有效。<br/>
* 在CDMA網路中結果也許不可靠。<br/>
*
* @return
*/
private String getNetworkCountryIso() {
return telMgr.getNetworkCountryIso();
}
/**
* MCC+MNC(mobile country code + mobile network code)<br/>
* 注意:僅當用戶已在網路註冊時有效。<br/>
* 在CDMA網路中結果也許不可靠。<br/>
*
* @return
*/
private String getNetworkOperator() {
return telMgr.getNetworkOperator();
}
/**
* 按照字母次序的current registered operator(當前已註冊的使用者)的名字<br/>
* 注意:僅當用戶已在網路註冊時有效。<br/>
* 在CDMA網路中結果也許不可靠。
*
* @return
*/
private String getNetworkOperatorName() {
return telMgr.getNetworkOperatorName();
}
/**
* 當前使用的網路型別:<br/>
* NETWORK_TYPE_UNKNOWN 網路型別未知 0<br/>
* NETWORK_TYPE_GPRS GPRS網路 1<br/>
* NETWORK_TYPE_EDGE EDGE網路 2<br/>
* NETWORK_TYPE_UMTS UMTS網路 3<br/>
* NETWORK_TYPE_HSDPA HSDPA網路 8<br/>
* NETWORK_TYPE_HSUPA HSUPA網路 9<br/>
* NETWORK_TYPE_HSPA HSPA網路 10<br/>
* NETWORK_TYPE_CDMA CDMA網路,IS95A 或 IS95B. 4<br/>
* NETWORK_TYPE_EVDO_0 EVDO網路, revision 0. 5<br/>
* NETWORK_TYPE_EVDO_A EVDO網路, revision A. 6<br/>
* NETWORK_TYPE_1xRTT 1xRTT網路 7<br/>
* 在中國,聯通的3G為UMTS或HSDPA,移動和聯通的2G為GPRS或EGDE,電信的2G為CDMA,電信的3G為EVDO<br/>
*
* @return
*/
private int getNetworkType() {
return telMgr.getNetworkType();
}
/**
* 返回移動終端的型別:<br/>
* PHONE_TYPE_CDMA 手機制式為CDMA,電信<br/>
* PHONE_TYPE_GSM 手機制式為GSM,移動和聯通<br/>
* PHONE_TYPE_NONE 手機制式未知<br/>
*
* @return
*/
private int getPhoneType() {
return telMgr.getPhoneType();
}
/**
* 獲取ISO國家碼,相當於提供SIM卡的國家碼。
*
* @return Returns the ISO country code equivalent for the SIM provider's
* country code.
*/
private String getSimCountryIso() {
return telMgr.getSimCountryIso();
}
/**
* 獲取SIM卡提供的移動國家碼和行動網路碼.5或6位的十進位制數字.<br/>
* SIM卡的狀態必須是 SIM_STATE_READY(使用getSimState()判斷).
*
* @return Returns the MCC+MNC (mobile country code + mobile network code)
* of the provider of the SIM. 5 or 6 decimal digits.
*/
private String getSimOperator() {
return telMgr.getSimOperator();
}
/**
* 服務商名稱:<br/>
* 例如:中國移動、聯通<br/>
* SIM卡的狀態必須是 SIM_STATE_READY(使用getSimState()判斷).
*
* @return
*/
private String getSimOperatorName() {
return telMgr.getSimOperatorName();
}
/**
* SIM卡的序列號:<br/>
* 需要許可權:READ_PHONE_STATE
*
* @return
*/
private String getSimSerialNumber() {
return telMgr.getSimSerialNumber();
}
/**
* SIM的狀態資訊:<br/>
* SIM_STATE_UNKNOWN 未知狀態 0<br/>
* SIM_STATE_ABSENT 沒插卡 1<br/>
* SIM_STATE_PIN_REQUIRED 鎖定狀態,需要使用者的PIN碼解鎖 2<br/>
* SIM_STATE_PUK_REQUIRED 鎖定狀態,需要使用者的PUK碼解鎖 3<br/>
* SIM_STATE_NETWORK_LOCKED 鎖定狀態,需要網路的PIN碼解鎖 4<br/>
* SIM_STATE_READY 就緒狀態 5
*
* @return
*/
private int getSimState() {
return telMgr.getSimState();
}
/**
* 唯一的使用者ID:<br/>
* 例如:IMSI(國際移動使用者識別碼) for a GSM phone.<br/>
* 需要許可權:READ_PHONE_STATE
*
* @return
*/
private String getSubscriberId() {
return telMgr.getSubscriberId();
}
/**
* 取得和語音郵件相關的標籤,即為識別符<br/>
* 需要許可權:READ_PHONE_STATE
*
* @return
*/
private String getVoiceMailAlphaTag() {
return telMgr.getVoiceMailAlphaTag();
}
/**
* 獲取語音郵件號碼:<br/>
* 需要許可權:READ_PHONE_STATE
*
* @return
*/
private String getVoiceMailNumber() {
return telMgr.getVoiceMailNumber();
}
/**
* ICC卡是否存在
*
* @return
*/
private boolean hasIccCard() {
return telMgr.hasIccCard();
}
/**
* 是否漫遊:(在GSM用途下)
*
* @return
*/
private boolean isNetworkRoaming() {
return telMgr.isNetworkRoaming();
}
/**
* 獲取資料活動狀態<br/>
* DATA_ACTIVITY_IN 資料連線狀態:活動,正在接受資料<br/>
* DATA_ACTIVITY_OUT 資料連線狀態:活動,正在傳送資料<br/>
* DATA_ACTIVITY_INOUT 資料連線狀態:活動,正在接受和傳送資料<br/>
* DATA_ACTIVITY_NONE 資料連線狀態:活動,但無資料傳送和接受<br/>
*
* @return
*/
private int getDataActivity() {
return telMgr.getDataActivity();
}
/**
* 獲取資料連線狀態<br/>
* DATA_CONNECTED 資料連線狀態:已連線<br/>
* DATA_CONNECTING 資料連線狀態:正在連線<br/>
* DATA_DISCONNECTED 資料連線狀態:斷開<br/>
* DATA_SUSPENDED 資料連線狀態:暫停<br/>
*
* @return
*/
private int getDataState() {
return telMgr.getDataState();
}
}