如何以编程方式设置默认SIM卡,以便在双SIM卡设备中拨打电话,发送短信或使用移动数据?

时间:2017-06-26 07:57:45

标签: android

我使用了' Subscription Manager'和电话经理'但他们没有做我需要的事情。 https://developer.android.com/reference/android/telephony/SubscriptionManager.html https://developer.android.com/reference/android/telephony/TelephonyManager.html

我发现并检查了我的问题的3个部分中的2个。 这是一个工作代码,用于发送短信并在双卡手机中拨打电话:

// get info about sim slots
@TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
public String getSubscriptionInfo(Context context) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1)
        return "Not supported";
    StringBuilder sb = new StringBuilder();
    SubscriptionManager sm = SubscriptionManager.from(context);
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

    sb.append("\r\nSlots ")
                    .append("   TelephonyManager getPhoneCount: "+tm.getPhoneCount());

    sb.append("\r\nSlots ")
                    .append("   SubscriptionManager getActiveSubscriptionInfoCount: "+sm.getActiveSubscriptionInfoCount())
                    .append("   max: "+sm.getActiveSubscriptionInfoCountMax())
                    .append("\r\n");

    List<SubscriptionInfo> subscriptions = sm.getActiveSubscriptionInfoList();
    if (subscriptions != null) {
        for (SubscriptionInfo si : subscriptions) {
            sb.append("SIM ")
                    .append("   slot: " + si.getSimSlotIndex())
                    .append("   id: " + si.getSubscriptionId())
                    .append("   iso: " + si.getCountryIso())
                    .append("   Mcc: " + si.getMcc())
                    .append("   Mnc: " + si.getMnc())
                    .append("   CarrierName: " + si.getCarrierName()).append(si.getDataRoaming() == SubscriptionManager.DATA_ROAMING_ENABLE ? " R" : "")
                    .append("\r\n");
        }
    }
    if (sb.length() > 2)
        sb.setLength(sb.length() - 2);

    return sb.toString();
}

// outputs
    // Slots    TelephonyManager getPhoneCount: 2
    // Slots    SubscriptionManager getActiveSubscriptionInfoCount: 2   max: 2
    // SIM    slot: 0   id: 6   iso: ua   Mcc: 255   Mnc: 1   CarrierName: Vodafone UA | MTS UKR
    // SIM    slot: 1   id: 1   iso: ua   Mcc: 255   Mnc: 6   CarrierName: life:)

// send sms in dual sim mode
    String phoneNumber = "+38063......"
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {

        if (checkSelfPermission(Manifest.permission.SEND_SMS)
                == PackageManager.PERMISSION_DENIED) {

            Log.d("permission", "permission denied to SEND_SMS - requesting it");
            String[] permissions = {Manifest.permission.SEND_SMS};

            requestPermissions(permissions, 1);
        }
    }
    // send sms
    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.getSmsManagerForSubscriptionId(6).sendTextMessage(phoneNumber, null, "Message2", null, null);
        Toast.makeText(getApplicationContext(),
                "Your sms has successfully sent!",
                Toast.LENGTH_LONG).show();
        Log.i("Dual_sim_app", "Your sms has successfully sent!");
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(),
                "SMS faild, please try again later!",
                Toast.LENGTH_LONG).show();
        e.printStackTrace();
        Log.i("Dual_sim_app", "SMS faild, please try again later!");
    }
// call in dual sim mode
    String phoneNumber = "+38063......"
    Context context = this.getApplicationContext();
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
        Log.i("Dual_sim_app", "CALL_PHONE permission fail");
        return;
    }
    Intent intentt = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber));
    intentt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intentt.putExtra("com.android.phone.force.slot", true);
    intentt.putExtra("Cdma_Supp", true);
    intentt.putExtra("simSlot", 0); //0 or 1 according to sim
    context.startActivity(intentt);

现在我需要使用每个SIM卡的移动数据。怎么样?

0 个答案:

没有答案