2012-11-05 12 views
18

Ho un telefono Android sim doppio. Sto usando questo codice per effettuare una chiamata:Chiamata dal secondo sim

private void callBack(String phone, Context context) { 
     Intent callIntent = new Intent(Intent.ACTION_CALL) 
       .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     callIntent.setData(Uri.parse("tel:" + phone)); 
     context.startActivity(callIntent); 

    } 

Sta funzionando bene. Ma chiama sempre da sim1 (sim preferibile). Come posso effettuare chiamate da Sim2? C'è un modo per gestire i telefoni dual sim?

risposta

30

Questo sembra funzionare su una vasta gamma di dispositivi dual SIM come Motorola, Micromax, HTC, Samsung

intent.putExtra("com.android.phone.extra.slot", 0); //For sim 1 

O

intent.putExtra("com.android.phone.extra.slot", 1); //For sim 2 

e se non funziona provate questo, in Samsung S duos funziona bene.

intent.putExtra("simSlot", 0); //For sim 1 

O

intent.putExtra("simSlot", 1); //For sim 2 

purtroppo per queste cose che dobbiamo entrare in modalità hit/processo come nessuna documentazione ufficiale è lì per il supporto dual-sim.

+0

Grazie. Fammi controllare su altri telefoni. A proposito, come sei venuto a conoscenza di questo? No dove è documentato? –

+1

Uno dei miei vari tentativi casuali –

+0

Sta funzionando !!! Sono mesi che aspetto ... Cheers !!! : D –

1

Android non fornisce API per il supporto di dispositivi dual SIM. Le API relative alla carta SIM di Android supportano solo la carta SIM predefinita (di solito la SIM # 1). L'implementazione hardware supporta la doppia SIM su Android, pertanto il produttore del dispositivo deve implementare le proprie API o personalizzare il codice sorgente per supportare il proprio componente hardware. È possibile contattare il produttore del dispositivo per l'SDK che supporta la doppia SIM.

4
final Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumberOrUssd)); 
    final int simSlotIndex = 1; //Second sim slot 

    try { 
     final Method getSubIdMethod = SubscriptionManager.class.getDeclaredMethod("getSubId", int.class); 
     getSubIdMethod.setAccessible(true); 
     final long subIdForSlot = ((long[]) getSubIdMethod.invoke(SubscriptionManager.class, simSlotIndex))[0]; 

     final ComponentName componentName = new ComponentName("com.android.phone", "com.android.services.telephony.TelephonyConnectionService"); 
     final PhoneAccountHandle phoneAccountHandle = new PhoneAccountHandle(componentName, String.valueOf(subIdForSlot)); 
     intent.putExtra("android.telecom.extra.PHONE_ACCOUNT_HANDLE", phoneAccountHandle); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intent); 

I lavori per dual-sim Asus Fonepad 7 Android 5.0