2011-11-03 235 views
19

我想要檢測我的雙卡android手機中是否有兩張SIM卡以編程方式存在。我發現了一個API(TelephonyManager.getSIMState()),但它適用於普通的單卡手機。有沒有任何API可以檢測我的雙SIM卡手機中是否插入了兩張SIM卡?檢測雙SIM卡Android手機中兩張SIM卡的狀態

+1

[以下是完整的解決方案爲您所尋找的(http://stackoverflow.com/a/17499889/703851) –

+0

嘗試使用MultiSim的庫:http://stackoverflow.com/a/41544422/1665964 –

回答

29

Android不支持多個SIM卡,至少從SDK。已經創建多SIM設備的設備製造商正在自行完成。歡迎您與您的設備製造商聯繫,看看他們是否有SDK附加組件或允許您訪問第二張SIM卡的東西。

編輯:(2015年7月15日)

由於API 22,你可以檢查使用SubscriptionManager的方法getActiveSubscriptionInfoList()多個SIM。有關Android Docs的更多詳細信息。

+4

最好提及在答案中提到的SDK版本。多年以後,如果回答這個問題,這個陳述可能會誤導。 – Narayanan

+0

從Android 5.2開始,android開始支持多模擬手機! – Saty

+0

有幾種方法可以通過java反射檢測雙卡,是的,官方不可能,但在大多數情況下,有一些黑客,請參閱:http://stackoverflow.com/questions/14517338/android-check-whether-the-phone -is-dual-sim –

1

那麼,這不是傻瓜證明。但如果你有兩個SIM這是兩個不同的網絡運營商,你可以嘗試這樣的事:

PhoneServiceStateListener listener = new PhoneServiceStateListener(this); 
tm.listen(listener, PhoneStateListener.LISTEN_SERVICE_STATE); 


. 
. 
. 
class PhoneServiceStateListener extends PhoneStateListener { 
Context context = null; 

public PhoneServiceStateListener(Context context) { 
    this.context = context; 
} 

public PhoneServiceStateListener() { 
} 

@Override 
public void onServiceStateChanged(ServiceState serviceState) { 

    if (serviceState.getState() == ServiceState.STATE_IN_SERVICE) { 
     //You get this event when your SIM is in service. 
     //If you get this event twice, chances are more that your phone is Dual SIM. 
     //Alternatively, you can toggle Flight Mode programmatically twice so 
     //that you'll get service state changed event. 
    } 
    super.onServiceStateChanged(serviceState); 
} 

} 

理想情況下,你會得到SIM服務狀態來爲SIM卡改變事件,然後您可以檢查網絡運營商名稱或者類似的東西來檢查你是否有兩張SIM卡。但是你需要在兩個不同的網絡上運行兩個SIM卡。

+1

它如何識別哪個SIM卡處於活動狀態? – gonzobrains

+0

@gonzobrains:哎呀,謝謝你的通知。更新了答案。 – Rajkiran

3

從現在起,如果手機是MTK支持的手機,您可以使用MediaTek SDK中的TelephonyManagerEx類。

看看the docs

+0

表面上[bcm_ds分支](https://code.google.com/p/android/issues/detail?id=14799#c26)或MediaTek SDK在[Android One]中是標準的(https://en.wikipedia .ORG /維基/ Android_One)。 [add](https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/b09babbf321c225b14abb013a6e1ed7041c45d06/src/com/android/providers/telephony/SmsProvider.java#275)'SmsManager.getDefault(slotId )'API。同時在Android One和MediaTek SDK中推出雙SIM卡標準,並且是合作伙伴。增強[關閉「過時」](https://code.google.com/p/android/issues/detail?id=14799#c27)。 –

+0

是的,這非常有幫助 –

0
final SubscriptionManager subscriptionManager = SubscriptionManager.from(getApplicationContext()); 
    final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList(); 
    int simCount = activeSubscriptionInfoList.size(); 
    btnBack.setText(simCount+" Sim available"); 
    Log.d("MainActivity: ","simCount:" +simCount); 

    for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfoList) { 
     Log.d("MainActivity: ","iccId :"+ subscriptionInfo.getIccId()+" , name : "+ subscriptionInfo.getDisplayName()); 
    } 
相關問題