2012-11-05 21 views
18

Tôi có điện thoại Android sim kép. Tôi đang sử dụng mã này để thực hiện cuộc gọi:Gọi từ sim thứ hai

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

    } 

Nó hoạt động tốt. Nhưng nó luôn gọi từ sim1 (sim thích hợp hơn). Làm thế nào để thực hiện cuộc gọi từ Sim2? Có cách nào để xử lý điện thoại sim kép?

Trả lời

30

Điều này dường như làm việc trên một phạm vi rộng lớn của các thiết bị sim kép như Motorola, Micromax, HTC, Samsung

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

HOẶC

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

và nếu không làm việc cố gắng này, Trong Samsung S bộ đôi này hoạt động tốt.

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

HOẶC

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

không may cho những điều này chúng ta phải nhận được vào chế độ hit/thử nghiệm như là không có tài liệu chính thức là có hỗ trợ dual-sim.

+0

Cảm ơn. Hãy để tôi kiểm tra nó trên các điện thoại khác. BTW, làm thế nào bạn biết về điều này? Không có tài liệu nào được ghi? –

+1

Một trong những lần thử ngẫu nhiên của tôi –

+0

Nó hoạt động !!! Đã chờ hàng tháng ... Chúc mừng !!! : D –

1

Android không cung cấp API để hỗ trợ thiết bị SIM kép. API liên quan đến thẻ SIM của Android chỉ hỗ trợ Thẻ SIM mặc định (thường là SIM # 1). Đó là việc triển khai phần cứng để hỗ trợ SIM kép trên Android, do đó nhà sản xuất thiết bị phải triển khai API của riêng họ hoặc tùy chỉnh mã nguồn để hỗ trợ thành phần phần cứng của họ. Bạn có thể liên hệ với nhà sản xuất thiết bị để hỗ trợ SIM kép.

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

Làm việc trên dual-sim Asus Fonepad 7 Android 5.0