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

时间:2014-08-27 10:14:59

标签: android android-intent telephonymanager

过去几天我一直在寻找这个,我开始知道:

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

以下链接提供了一个解决方案,但它在我的手机Samsung Galaxy S4 Mini上无效。

Call from second sim

我也找到了这个链接,我发现它非常有用。

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

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

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卡管理器部分下的设置中,当我必须为语音呼叫选择首选SIM卡时,我有四个选项:

  1. 当前网络
  2. 始终询问
  3. SIM 1
  4. SIM 2
  5. 当我选择“始终询问”选项时,在拨打电话之前,我总是被要求选择一个显示在对话框中的SIM卡来拨打电话。我的问题是我可以在我的应用程序中利用这个东西,我按下按钮拨打电话,但它总是问我,当我选择Ask Always选项时它的方式相同。

    对不起,我把这个问题写得很冗长,但我认为这需要它。请提前帮助和非常感谢。

    修改

    每次按下任何按钮(类似于“设置”中的“始终询问”选项),我怎样才能实现此目的: Select SIM Dialog Box

3 个答案:

答案 0 :(得分:9)

<强>代码:

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

答案 1 :(得分:4)

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

答案 2 :(得分:0)

我正在寻找这个选项的问题。以下是步骤:

  • 首先你需要xposed框架和;
  • 安装miui应用程序;
  • 在联系人中添加首选的SIM卡选项