2つのSIMカードがデュアルSIMにあるかどうかを検出したいAndroid電話がプログラムで実行されています。1つのAPI(TelephonyManager.getSIMState()
)が見つかりましたが、これは通常のシングルSIM用ですデュアルSIM電話に2つのSIMが挿入されているかどうかを検出するためのAPIはありますか?
Androidは、少なくともSDKからの複数のSIMをサポートしていません。マルチSIMデバイスを作成したデバイスメーカーは、独自に作成しています。デバイスの製造元に連絡して、SDKアドオンまたは2つ目のSIMにアクセスできるものがあるかどうかを確認してください。
編集:(2015年7月15日)
API 22以降、SubscriptionManager
のメソッドgetActiveSubscriptionInfoList()
を使用して複数のSIMを確認できます。 Android Docs の詳細。
今後、電話がMTK搭載の場合、MediaTek SDKのTelephonyManagerExクラスを使用できます。
the docs を見てください。
まあ、これはばかげた証拠ではありません。しかし、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サービス状態変更イベントを取得し、ネットワークオペレーター名などを確認して、2つのSIMカードがあるかどうかを確認できます。ただし、2つの異なるネットワークで2つのSIMカードを実行する必要があります。
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());
}