2014-08-27 7 views
15

Ich habe für diesen aus vergangenen Tagen und ich Suche kamen mit, das wissen.Anrufe eines bestimmt SIM in einem Dual-SIM-Gerät

„Dual-SIM wird nicht aus der Box in Android unterstützt ist eine benutzerdefinierte Änderung von Herstellern, und es gibt keine öffentliche API, um es zu steuern. "

Es gibt eine Lösung in der unten stehenden Link, aber es funktioniert nicht auf meinem Handy Samsung Galaxy S4 Mini.

Call from second sim

Ich fand auch diese Verbindung, die ich sehr informativ.

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

Jetzt weiß ich, dass mit dem folgenden Code, könnte ich eine Chance haben, mit etwas Glück, um es arbeiten:

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 

Ich bin darüber nicht sicher, aber ich habe eine Frage .

in den Einstellungen unter dem SIM-Card Manager Abschnitt, wenn ich eine bevorzugte SIM-Karte für Sprachanruf wählen habe, bekomme ich vier Möglichkeiten:

  1. Aktuelles Netzwerk
  2. Immer fragen
  3. SIM 1
  4. SIM 2

Wenn ich Option immer fragen wählen, dann bevor Sie einen Anruf tätigen ich immer eine SIM-Karte für die Wahl gefragt werde, in einem Dialogfeld angezeigt, um den Anruf zu tätigen. Meine Frage ist, kann ich dieses Ding in meiner App ausnutzen, wo ich einen Knopf drücke, um einen Anruf zu machen, aber es fragt mich immer so wie es tut, wenn ich Ask Always Option wähle.

Es tut mir leid, ich habe diese Frage lange, aber ich denke, dass es erforderlich war. Bitte helfen Sie und vielen Dank im Voraus.

EDIT:

Wie kann ich dies erreichen, jedes Mal drücke ich eine beliebige Taste (Art ähnlich in den Einstellungen Option Immer fragen): Select SIM Dialog Box

+1

Haben Sie eine Lösung für dieses Problem gefunden? –

+0

@GauravVachhani Sorry Bruder, habe nichts gefunden, das die universelle Lösung für dieses Problem sein wird. Für jetzt ist klar, dass es keine gibt. –

+0

Ich arbeite an einer Anwendung, die ähnliche Funktionalität benötigt .. haben Sie irgendeine Lösung dafür gefunden? –

Antwort

7

Code:

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

Ich habe ein Jio Lyf Wind 2 Handy, ich denke, ich scheue, einen neuen Namen diese Liste zu bekommen .. Können Sie sagen, wie Sie diese Liste bekommen oder diesen Namen vom Modell bekommen, indem Sie irgendeinen Code einstellen. –

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

Wie kann ich prüfen, ob SIM 0 ausgewählt ist? –

+0

Ich mache den benutzerdefinierten Dialog für sim1. Und sim 2 und wählen Sie sim –

Verwandte Themen