20

プログラムでデュアルSIMAndroidフォンに2枚のSIMカードがあるかどうかを検出したい。API(TelephonyManager.getSIMState())が1つ見つかりましたが、これは通常のシングルSIM電話用です。2つのSIMがデュアルSIM電話に挿入されているかどうかを検出するAPIはありますか?

4

4 に答える 4

35

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

編集: (2015年7月15日)

SubscriptionManagerAPI 22以降、のメソッドを使用して複数のSIMをチェックできますgetActiveSubscriptionInfoList()Androidドキュメントの詳細。

于 2011-11-03T14:32:28.150 に答える
3

今後、電話機がMTKを搭載している場合は、MediaTekSDKのTelephonyManagerExクラスを使用できます。

ドキュメントを見てください。

于 2014-11-28T18:57:05.447 に答える
1

まあ、これは絶対確実ではありません。ただし、2つの異なるネットワークオペレーター上にある2つの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カードが2枚あるかどうかを確認できます。ただし、2つの異なるネットワークで2つのSIMカードを実行する必要があります。

于 2013-01-31T06:49:51.303 に答える
1
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());
    }
于 2017-12-20T07:54:15.337 に答える