android 擷取sim卡電訊廠商資訊
TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE);
TelephonyManager 的使用
TelephonyManager 提供裝置上擷取通訊服務資訊的入口,應用程式使用這個類的方法來擷取電話的服務商或者狀態。程式也可以註冊一個監聽器來監聽電話狀態的改變。
不需要直接執行個體化這個類,使用Context.getSystemService(Context.TELEPHONY_SERVICE)來擷取這個類的執行個體。
注意:一些電話資訊需要相應的許可權。
方法無效
getSimOperatorName()
Returns the Service Provider Name (SPN). // 擷取服務提供者名字,比如電信,聯通,移動
用下面的方法
第一種方法:
擷取手機的IMSI碼,並判斷是中國移動/中國聯通/中國電信
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
/** 擷取SIM卡的IMSI碼
* SIM卡唯一標識:IMSI 國際移動使用者識別碼(IMSI:International Mobile Subscriber Identification Number)是區別移動使用者的標誌,
* 儲存在SIM卡中,可用於區別移動使用者的有效資訊。
IMSI由MCC、MNC、MSIN組成,其中MCC為移動國家號碼,由3位元字組成,
* 唯一地識別移動客戶所屬的國家,我國為460;MNC為網路id,由2位元字組成,
* 用於識別移動客戶所歸屬的移動網路,中國移動為00,中國聯通為01,中國電信為03;
MSIN為移動客戶識別碼,採用等長11位元字構成。
*
唯一地識別國內GSM移動通訊網中移動客戶。所以要區分是移動還是聯通,只需取得SIM卡中的MNC欄位即可
*/
String imsi = telManager.getSubscriberId();
if(imsi!=null){
if(imsi.startsWith(“46000″) || imsi.startsWith(“46002″))
{//因為移動網路編號46000下的IMSI已經用完,所以虛擬了一個46002編號,134/159號段使用了此編號
//中國移動
}else if(imsi.startsWith(“46001″)){
//中國聯通
}else if(imsi.startsWith(“46003″)){
//中國電信
}
}
第二種方法
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String operator = telManager.getSimOperator();
if(operator!=null){
if(operator.equals(“46000″) || operator.equals(“46002″)|| operator.equals(“46007″)){
//中國移動
}else if(operator.equals(“46001″)){
//中國聯通
}else if(operator.equals(“46003″)){
//中國電信
}
}
在檔案AndroidManifest.xml中添加許可權
其他方法具體使用方法請查看API 文檔TelephonyManager中方法說明。
在檔案
AndroidManifest.xml
中添加許可權
<uses-permission android:name=
"android.permission.READ_PHONE_STATE"/>
TelephonyManager tel = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String simOperator = tel.getSimOperator();
IMSI共有15位,其結構如下:
MCC+MNC+MIN
MCC:Mobile Country Code,移動國家碼,共3位,中國為460;
MNC:Mobile Network Code,移動網路碼,共2位,電信03,移動02,聯通GSM 01,一個典型的IMSI號碼為460030912121001;
MIN共有10位,其結構如下:
09+M0M1M2M3+ABCD
其中的M0M1M2M3和MDN號碼中的H0H1H2H3可存在對應關係,ABCD四位為自由分配。
可以看出IMSI在MIN號碼前加了MCC,可以區別出每個使用者的來自的國家,因此可以實現國際漫遊。在同一個國家內,如果有多個CDMA電訊廠商,可以通過MNC來進行區別.
功能 說明
getCellLocation() 返回的儲存格位置的裝置
ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION
getDeviceId() 返回的IMEI / MEID的裝置。 如果該裝置是GSM裝置
然後IMEI號將被退回,如果該裝置是一個CDMA裝置然後MEID
將被退回
READ_PHONE_STATE
getLine1Number() 返回裝置的電話號碼(MSISDN號碼)
READ_PHONE_STATE
getNetworkOperatorName() 返回註冊的網路電訊廠商的名字
getNetworkOperator() 返回的MCC +跨國公司的註冊網路電訊廠商
getNetworkCountryIso() 返回註冊的網路電訊廠商的國家代碼
getSimCountryIso() 返回SIM卡電訊廠商的國家代碼
READ_PHONE_STATE
getSimOperator() 返回SIM卡電訊廠商的單個核細胞數+冶
READ_PHONE_STATE
getSimOperatorName() 返回SIM卡電訊廠商的名字
READ_PHONE_STATE
getSimSerialNumber() 返回SIM卡的序號
READ_PHONE_STATE
getNetworkType() 返回網路裝置可用的類型。 這將是
下列其中一個值:
TelephonyManager.NETWORK_TYPE_UNKNOWN
TelephonyManager.NETWORK_TYPE_GPRS
TelephonyManager.NETWORK_TYPE_EDGE
TelephonyManager.NETWORK_TYPE_UMTS
READ_PHONE_STATE
getPhoneType() 返回裝置的類型。 這將是以下值之一:
TelephonyManager.PHONE_TYPE_NONE
TelephonyManager.PHONE_TYPE_GSM
TelephonyManager.PHONE_TYPE_CDMA
READ_PHONE_STATE
getSubscriberId() 返回使用者識別碼(的IMSI)的裝置
READ_PHONE_STATE
getNeighboringCellInfo() 返回NeighboringCellInfo類代表名單
相鄰小區的資訊,如果可用,否則將
返回null
ACCESS_COARSE_UPDATES