Ответ 1
Android не поддерживает несколько функций SIM до API 22. Но начиная с Android 5.1 (уровень API 22), Android начал поддерживать несколько SIM-карт. Подробнее о Документация для Android
Ссылка на этот Оригинальный ответ
Есть несколько вопросов о доступе к функциям Dual SIM через Android SDK, на все ответы с краткими заявлениями о том, что такие функции не поддерживаются в Android.
Несмотря на это, существуют два SIM-телефона, и такие приложения, как MultiSim, могут обнаружить это каким-то независимым от производителя способом.
Итак, начиная с этого подтверждения, позвольте мне попытаться задать еще несколько острых вопросов:
(Кстати, суть всего лишь заключается в том, чтобы реализовать этот алгоритм: отправить SMS с SIM-картой 1, если сбой доставки, переключитесь на SIM-карту 2 и отправьте сообщение таким образом.)
Android не поддерживает несколько функций SIM до API 22. Но начиная с Android 5.1 (уровень API 22), Android начал поддерживать несколько SIM-карт. Подробнее о Документация для Android
Ссылка на этот Оригинальный ответ
существует 3 разных категории...
Таким образом, функции двойного sim доступны, но не документированы и, следовательно, официально не поддерживаются.
Сказав, что это не значит, что он не будет использоваться, это просто означает, что андроид (или, в этом случае, google или даже manufaturer) не несет ответственности за функциональность ваших приложений.
Но это может сработать, например, контакты аналогичны.
Затем вы можете спросить, как все будут знать об этих функциях, если в случае, если это не задокументировано. Эй, андроид - с открытым исходным кодом.. загляните в код и найдите его для себя. Вот что я думаю, что разработчики мульти-sim сделали.
Вы можете использовать библиотеку MultiSim
для получения информации о мульти-сим-устройствах.
Доступная информация с каждой сим-карты: imei, imsi, серийный номер sim, sim state, код оператора sim, имя оператора SIM, SIM-карта iso, код оператора сети, имя оператора сети, сетевой оператор iso, тип сети, сетевой роуминг.
Просто добавьте библиотеку зависимостей gradle в app build.gradle:
dependencies {
compile 'com.kirianov.multisim:multisim:[email protected]'
}
Не забудьте добавить требуемое разрешение в AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Использовать аналогичный код в коде:
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(this);
// or
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(this, new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateInfo();
}
});
public void updateInfo() {
// for update UI
runOnUiThread(new Runnable() {
@Override
public void run() {
multiSimTelephonyManager.update();
useInfo();
}
}
// for update background information
multiSimTelephonyManager.update();
useInfo();
}
public void useInfo() {
// get number of slots:
if (multiSimTelephonyManager != null) {
multiSimTelephonyManager.sizeSlots();
}
// get info from each slot:
if (multiSimTelephonyManager != null) {
for(int i = 0; i < multiSimTelephonyManager.sizeSlots(); i++) {
multiSimTelephonyManager.getSlot(i).getImei();
multiSimTelephonyManager.getSlot(i).getImsi();
multiSimTelephonyManager.getSlot(i).getSimSerialNumber();
multiSimTelephonyManager.getSlot(i).getSimState();
multiSimTelephonyManager.getSlot(i).getSimOperator();
multiSimTelephonyManager.getSlot(i).getSimOperatorName();
multiSimTelephonyManager.getSlot(i).getSimCountryIso();
multiSimTelephonyManager.getSlot(i).getNetworkOperator();
multiSimTelephonyManager.getSlot(i).getNetworkOperatorName();
multiSimTelephonyManager.getSlot(i).getNetworkCountryIso();
multiSimTelephonyManager.getSlot(i).getNetworkType();
multiSimTelephonyManager.getSlot(i).isNetworkRoaming();
}
}
}
// or for devices above android 6.0
MultiSimTelephonyManager multiSimTelephonyManager = new MultiSimTelephonyManager(MyActivity.this, broadcastReceiverChange);
Usage:
// get info about slot 'i' by methods:
multiSimTelephonyManager.getSlot(i).
Force update info
// force update phone info (needed on devices above android 6.0 after confirm permissions request)
multiSimTelephonyManager.update();
Handle of permissions request (6.0+)
// in YourActivity for update info after confirm permissions request on devices above android 6.0
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (multiSimTelephonyManager != null) {
multiSimTelephonyManager.update();
}
}
<receiver
android:name=".SimChangedReceiver"
android:enabled="true"
android:process=":remote" >
<intent-filter>
<action android:name="android.intent.action.SIM_STATE_CHANGED" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
SimChangedReceiver class
public class SimChangedReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equalsIgnoreCase("android.intent.action.SIM_STATE_CHANGED")) {
Log.d("SimChangedReceiver", "--> SIM state changed <--");
// do code whatever u want to apply action //
}
}
}
Это также работа для двойного sim, и вам не нужно называть этот ресивер, потому что он будет удален удаленно