使用双SIM卡设备中的指定SIM卡拨打电话

过去几天我一直在寻找这个东西,我才知道:

“双卡不支持Android的开箱即用,这是由制造商自定义的修改,并没有公共的API来控制它。

在下面的链接提供的解决scheme,但它不工作在我的手机三星Galaxy S4迷你。

从第二个SIM卡打电话

我也发现这个链接,我发现非常丰富。

http://www.devlper.com/2010/06/using-androidtelephonymanager/

现在我知道使用下面的代码,我可能有幸运行起来:

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卡pipe理器”下的“设置”中,当我必须select首选的SIM卡进行语音呼叫时,我有四个选项:

  1. 当前networking
  2. 总是问
  3. SIM 1
  4. SIM 2

当我select“总是询问”选项时,在拨打电话之前,我总是要求select显示在对话框中的SIM卡拨打电话。 我的问题是我可以利用这个东西在我的应用程序中,我按下一个button来打电话,但总是问我,当我select了总是select的问题。

对不起,我提出了这个问题冗长,但我认为它需要它。 请提前帮忙,谢谢。

编辑:

我怎样才能做到这一点,每次我按任何button(类似于“设置”中的“始终询问”选项): 选择SIM卡对话框

Solutions Collecting From Web of "使用双SIM卡设备中的指定SIM卡拨打电话"

码:

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