2012-11-05 17 views
18

Mam telefon dual sim z systemem Android. Używam tego kodu, aby wykonać połączenie:Zadzwoń z drugiego sima

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

    } 

Działa poprawnie. Ale zawsze wykonuje połączenie z sim1 (preferowana karta SIM). Jak wykonywać połączenia z poziomu Sim2? Czy istnieje sposób radzenia sobie z dual sim telefonów?

Odpowiedz

30

To wydaje się działać na szerokiej gamie urządzeń dualnych sim jak Motorola, Micromax, HTC, Samsung

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

LUB

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

a jeśli nie działa, spróbuj tego, Samsung S duos to działa dobrze.

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

LUB

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

niestety do tych rzeczy, które musimy dostać się do trybu hit/próbny jako oficjalna dokumentacja nie jest dla dual-sim wsparcia.

+0

Dzięki. Pozwól, że sprawdzę to na innych telefonach. BTW, jak się o tym dowiedziałeś? Nie gdzie jest to udokumentowane? –

+1

Jedna z moich kilku prób losowych –

+0

Działa! Czekam od miesięcy ... Na zdrowie! : D –

1

Android nie udostępnia interfejsów API do obsługi urządzeń z dwiema kartami SIM. Funkcje API związane z kartą SIM systemu Android obsługują tylko domyślną kartę SIM (zwykle SIM nr 1). Jest to implementacja sprzętowa obsługująca dual SIM na Androida, dlatego producent urządzeń musi implementować własne interfejsy API lub dostosowywać kod źródłowy do obsługi swojego komponentu sprzętowego. Możesz skontaktować się z producentem urządzenia, aby uzyskać pakiet SDK z obsługą dwóch kart 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); 

Prace nad dual-sim Asus Fonepad 7 Android 5.0