21

我有一部双卡安卓手机。我正在使用此代码拨打电话:

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

    }

它工作正常。但它总是从 sim1(首选 sim)拨打电话。如何从 Sim2 拨打电话?有没有办法处理双卡手机?

4

3 回答 3

31

这似乎适用于摩托罗拉、Micromax、HTC、三星等大量双卡设备

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

或者

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

如果不起作用,试试这个,在三星 S 二重奏中这工作得很好。

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

或者

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

不幸的是,对于这些事情,我们必须进入命中/试用模式,因为没有官方文档支持双卡。

于 2013-10-20T06:08:55.023 回答
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);

使用双卡 Asus Fonepad 7 Android 5.0

于 2016-02-23T16:33:12.827 回答
2

Android 不提供 API 来支持双 SIM 卡设备。Android 的 SIM 卡相关 API 仅支持默认 SIM 卡(通常是 SIM #1)。在 Android 上支持双 SIM 卡是硬件实现,因此设备制造商必须实现自己的 API 或自定义源代码以支持他们的硬件组件。您可以联系设备制造商以获取支持双 SIM 卡的 SDK。

于 2012-12-21T06:07:32.180 回答