android獲取sim卡
A. android如何讀取雙卡雙待手機SIM卡信息
點擊設置里,進入雙卡和移動網路,點擊一卡或二卡,裡面有個啟動點擊啟動,下面有運營商網路設置,選取運營商,選擇移動或聯通,電信就可以了就可以獲得SIM卡信息了。
B. Android 手機讀取SIM卡信息
手機和 wifi 已經改變了人們的生活方式,成為生活的必需品。手機號碼和寬頻賬號成為運營商相互競爭的重要一環,雙卡雙待的手機需求也逐漸增大,大多數手機廠商將主打手機改為雙卡雙待全網通,而運營商在佔領主SIM卡後,對SIM卡2的慾望越來越大,獲取SIM卡2的信息的需求也變大,只有知己知彼,才能佔得先機。
這里簡單介紹一下 Android 手機如何讀取 Sim 卡信息
可以通過 ContentProvider 進行查詢
使用 SubscriptionManager 類進行讀取信息
通過 SubscriptionInfo 的實例進行讀取信息,對應的是 Siminfo 的表欄位,下面為該類源碼:
該類沒有常用的手機IMEI值和IMSI值,這個值可以通過 TelephonyManager 進行讀取,不過需要通過反射,具體可見下方關於 TelephonyManager 的介紹
使用 TelephonyManager 讀取SIM卡信息:
讀取副卡信息大多隻需要1個參數,slotId 或者 subId,源碼方法如下(我們主要關心的是IMEI和IMSI,主要看getDeviceId和getSubscriberId方法):
可以看到源碼中的這些方法均加了 @hide 的參數,無法直接調用,這里就需要用到反射:
現在就可以通過反射進行調用方法讀取數據了
特別注意:
C. Android 判斷SIM卡屬於哪個移動運營商
第一種方法:
獲取手機的IMSI碼,並判斷是中國移動\中國聯通\中國電信
TelephonyManager telManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
/** 獲取SIM卡的IMSI碼
* SIM卡唯一標識:IMSI 國際移動用戶識別碼(IMSI:InternationalMobile Subscriber Identification Number)是區別移動用戶的標志,
* 儲存在SIM卡中,可用於區別移動用戶的有效信息。IMSI由MCC、MNC、MSIN組成,其中MCC為移動國家號碼,由3位數字組成,
*唯一地識別移動客戶所屬的國家,我國為460;MNC為網路id,由2位數字組成,
*用於識別移動客戶所歸屬的移動網路,中國移動為00,中國聯通為01,中國電信為03;MSIN為移動客戶識別碼,採用等長11位數字構成。
* 唯一地識別國內GSM移動通信網中移動客戶。所以要區分是移動還是聯通,只需取得SIM卡中的MNC欄位即可
*/
Stringimsi = telManager.getSubscriberId();
if(imsi!=null){
if(imsi.startsWith("46000") ||imsi.startsWith("46002")){//因為移動網路編號46000下的IMSI已經用完,所以虛擬了一個46002編號,134/159號段使用了此編號
//中國移動
}elseif(imsi.startsWith("46001")){
//中國聯通
}elseif(imsi.startsWith("46003")){
//中國電信
}
}
第二種方法
TelephonyManager telManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Stringoperator = telManager.getSimOperator();
if(operator!=null){
if(operator.equals("46000") ||operator.equals("46002")){
//中國移動
}elseif(operator.equals("46001")){
//中國聯通
}elseif(operator.equals("46003")){
//中國電信
}
}