Определить состояние двух SIM-карт в Android-телефоне с двумя SIM-картами
Я хочу определить, есть ли две SIM-карты в моем Android-телефоне с двумя SIM-картами программно. Я нашел один API (TelephonyManager.getSIMState()
), но это для обычных телефонов с одной SIM-картой. Существуют ли какие-либо API-интерфейсы для определения наличия двух SIM-карт в моем телефоне с двумя SIM-картами?
4 ответа
Android не поддерживает несколько SIM-карт, по крайней мере, из SDK. Производители устройств, которые создали устройства с несколькими SIM-картами, делают это самостоятельно. Вы можете связаться с производителем вашего устройства и узнать, есть ли у него надстройка SDK или что-то, что позволяет вам получить доступ ко второй SIM-карте.
Изменить: (15 июля 2015 г.)
Начиная с API 22, вы можете проверить наличие нескольких SIM-карт, используя SubscriptionManager
метод getActiveSubscriptionInfoList()
, Подробнее об Android Документах.
С этого момента, если телефон работает на базе MTK, вы можете использовать класс TelephonyManagerEx из MediaTek SDK.
Посмотрите на документы.
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());
}
Ну, это не дурак. Но если у вас есть две 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-карты. Но вам нужно иметь две сим-карты, работающие в двух разных сетях.