Search code examples
androidsmssmsmanager

How to prompt for sim selection before sending an SMS in dual sim phones using SMS manager programmatically?


How to find SubscriptionId by prompting sim selection?

 SmsManager smsManager = null;
                   if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
                     smsManager = SmsManager.getSmsManagerForSubscriptionId();
                   }else{
                       smsManager = SmsManager.getDefault();
                   }`

subcription id needed inside getSmsManagerForSubscriptionId()


Solution

  • You can subscriptionManagerObj.getActiveSubscriptionInfoList() to get subscriptionIds based on Sim Slot. Based on the documentation

    Get the SubscriptionInfo(s) of the currently inserted SIM(s). The records will be sorted by getSimSlotIndex() then by getSubscriptionId()

     SmsManager smsManager = null;
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
    
        SubscriptionManager subscriptionManager = (SubscriptionManager)getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        List<SubscriptionInfo> subscriptionInfoList=subscriptionManager.getActiveSubscriptionInfoList();
        int subId = subscriptionInfoList.get(0).getSubscriptionId();// change index to 1 if you want to get Subscrption Id for slot 1.
        smsManager = SmsManager.getSmsManagerForSubscriptionId(subId);
    
     }else{
          smsManager = SmsManager.getDefault();
     }