2011-11-03 14 views
19

デュアルSIMのAndroid端末に2つのSIMカードがプログラム的に存在するかどうかを検出します。私は1つのAPI(TelephonyManager.getSIMState())を見つけましたが、それは通常のシングルSIM電話用です。私のデュアルSIM電話機に2つのSIMが挿入されているかどうかを検出するためのAPIはありますか?デュアルSIMのAndroid端末で2つのSIMカードの状態を検出

+1

[ここにあなたが探しているもののための完全なソリューションがある](http://stackoverflow.com/a/17499889/703851) –

+0

は、Multisimのライブラリを使用してみてください。http://stackoverflow.com/a/41544422/1665964 –

答えて

29

Androidは、少なくともSDKでは複数のSIMをサポートしていません。マルチSIMデバイスを作成したデバイスメーカは、独自にデバイスを製造しています。あなたは、あなたのデバイスの製造元に連絡して、SDKのアドオンがあるのか​​、それとも2番目のSIMにアクセスできるのかを確認できます。

編集:(2015年7月15日)

API 22以来、あなたはSubscriptionManagerの方法getActiveSubscriptionInfoList()を使用して、複数のSIMを確認することができます。 Android Docsの詳細

+4

答えに記載されているSDKのバージョンについて言及することをお勧めします。この答えが何年も後に見られると、その声明は誤解を招く恐れがあります。 – Narayanan

+0

Android 5.2以降Android搭載のマルチSIM携帯を開始しました! – Saty

+0

Java反射によるデュアルシムの検出にはいくつかの方法がありますが、正式には可能ではありませんが、ほとんどの場合、いくつかのハックがあります:http://stackoverflow.com/questions/14517338/android-check-whether-the-phone -is-dual-sim –

1

これはまあまあの証拠ではありません。しかし、あなたは二つの異なるネットワークオペレータ上にある2枚のSIMを持っている場合は、このような何か試すことができます:理想的には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の両方のためのイベントを変更し、その後、ネットワークオペレータ名を確認することができますあなたが2枚のSIMカードを持っているかどうかを確認することができます。しかし、2つの異なるネットワーク上で2つのSIMカードを稼働させる必要があります。

+1

どのSIMカードがアクティブであるかはどのように分かりますか? – gonzobrains

+0

@gonzobrains:ご報告いただきありがとうございます。答えを更新しました。 – Rajkiran

3

これからMTKで動く携帯電話の場合、MediaTek SDKのTelephonyManagerExクラスを使用できます。

the docsをご覧ください。

+0

[Android One](https://en.wikipedia)の標準であることを表面上[bcm_dsブランチ](https://code.google.com/p/android/issues/detail?id=14799#c26)またはMediaTek SDK .org/wiki/Android_One)。両方の[追加](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()); 
    } 
関連する問題