Выполнение вызова с использованием указанной SIM-карты в устройстве с двумя SIM-картами

Я искал это за последние несколько дней, и я узнал, что:

"Двойная SIM-карта не поддерживается в Android из коробки. Это пользовательская модификация производителей, и для ее контроля нет публичного API".

В приведенной ниже ссылке есть решение, но оно не работает на моем телефоне Samsung Galaxy S4 Mini.

Звонок со второго sim

Я также нашел эту ссылку, которую я нашел очень информативной.

http://www.devlper.com/2010/06/using-android-telephonymanager/

Теперь я знаю, что, используя следующий код, у меня может быть шанс, что вам удастся заставить его работать:

Intent callIntent = new Intent(Intent.ACTION_CALL)
                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        callIntent.setData(Uri.parse("tel:" + phone));
        context.startActivity(callIntent);
callIntent.putExtra("com.android.phone.extra.slot", 0); //For sim 1
and
callIntent.putExtra("com.android.phone.extra.slot", 1); //For sim 2

Я не уверен в этом, но у меня есть вопрос.

В настройках в разделе "Диспетчер SIM-карты", когда мне нужно выбрать предпочтительную SIM-карту для голосового вызова, я получаю четыре варианта:

  • Текущая сеть
  • Спросить всегда
  • SIM 1
  • SIM 2

Когда я выбираю параметр "Спросить всегда" , перед выполнением звонка мне всегда предлагается выбрать SIM-карту, отображаемую в диалоговом окне, чтобы позвонить. Мой вопрос: могу ли я использовать эту вещь в своем приложении, где я нажимаю кнопку, чтобы позвонить, но она всегда спрашивает меня так же, как и при выборе параметра "Спросить всегда" .

Извините, я долго задавал этот вопрос, но я думаю, что он этого требует. Пожалуйста, помогите и большое спасибо заранее.

EDIT:

Как я могу добиться этого, каждый раз, когда я нажимаю любую кнопку (вид похожих на параметр "Спросить всегда" в настройках): Select SIM Dialog Box

Ответы

Ответ 1

Код:

private final static String simSlotName[] = {
        "extra_asus_dial_use_dualsim",
        "com.android.phone.extra.slot",
        "slot",
        "simslot",
        "sim_slot",
        "subscription",
        "Subscription",
        "phone",
        "com.android.phone.DialingMode",
        "simSlot",
        "slot_id",
        "simId",
        "simnum",
        "phone_type",
        "slotId",
        "slotIdx"
};


Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "any number"));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("com.android.phone.force.slot", true);
    intent.putExtra("Cdma_Supp", true);
    //Add all slots here, according to device.. (different device require different key so put all together)
    for (String s : simSlotName)
        intent.putExtra(s, 0); //0 or 1 according to sim.......

    //works only for API >= 21
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
        intent.putExtra("android.telecom.extra.PHONE_ACCOUNT_HANDLE", (Parcelable) " here You have to get phone account handle list by using telecom manger for both sims:- using this method getCallCapablePhoneAccounts()");

    context.startActivity(intent);

Ответ 2

TelecomManager telecomManager = (TelecomManager) this.getSystemService(Context.TELECOM_SERVICE);
List<PhoneAccountHandle>    phoneAccountHandleList = telecomManager.getCallCapablePhoneAccounts();


 Intent intent = new Intent(Intent.ACTION_CALL).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.parse("tel:" + number));
        intent.putExtra("com.android.phone.force.slot", true);
        intent.putExtra("Cdma_Supp", true);
        if (simselected== 0) {   //0 for sim1
            for (String s : simSlotName)
                intent.putExtra(s, 0); //0 or 1 according to sim.......

            if (phoneAccountHandleList != null && phoneAccountHandleList.size() > 0)
                intent.putExtra("android.telecom.extra.PHONE_ACCOUNT_HANDLE", phoneAccountHandleList.get(0));

        } else {      1 for sim2
            for (String s : simSlotName)
                intent.putExtra(s, 1); //0 or 1 according to sim.......

            if (phoneAccountHandleList != null && phoneAccountHandleList.size() > 1)
                intent.putExtra("android.telecom.extra.PHONE_ACCOUNT_HANDLE", phoneAccountHandleList.get(1));

        }
        startActivity(intent);