2014-08-27 2 views
15

Я искал это из за последние несколько дней, и я узнал, что:.Сделать вызов с использованием указанного SIM в устройстве Dual SIM

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

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

Call from second 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-карту для голосового вызова, я получаю четыре варианта:

  1. тока сети
  2. Ask Всегда
  3. SIM 1
  4. SIM 2

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

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

EDIT:

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

+1

Вы нашли решение для этой проблемы? –

+0

@GauravVachhani Извините, брат, не нашел ничего, что станет универсальным решением этой проблемы. На данный момент ясно, что нет. –

+0

Я работаю над приложением, которое требует аналогичной функциональности .. нашли ли вы решение для этого? –

ответ

7

Код:

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); 
+0

У меня есть Jio Lyf Wind 2 mobile, я думаю, что shud получил новое название этого списка. Можете ли вы рассказать, как у этого списка или получить это имя от модели, установив любой код. –

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); 
+0

Как я могу проверить выбор SIM 0? –

+0

Я делаю пользовательский диалог для sim1. И sim 2 и выберите sim –

Смежные вопросы