通过SmsManager在双卡android手机中发送短信

通过SmsManager在双卡android手机中发送短信,android,sms,smsmanager,dual-sim,Android,Sms,Smsmanager,Dual Sim,我想通过短信管理器发送短信,但在第一个sim卡中,我没有余额,在这种情况下,短信失败。因此,如何发送短信的第二个sim卡只从我的应用程序。 其他应用程序如whatsApp在注册时间从我的第二个sim卡发送消息,如果第一个sim卡中没有可用余额。所以我认为这是可能的。请帮帮我 String mobileNo = phoneNumber1.getText().toString(); try { SmsManager smsManager = SmsManager.getDefault(

我想通过短信管理器发送短信,但在第一个sim卡中,我没有余额,在这种情况下,短信失败。因此,如何发送短信的第二个sim卡只从我的应用程序。 其他应用程序如whatsApp在注册时间从我的第二个sim卡发送消息,如果第一个sim卡中没有可用余额。所以我认为这是可能的。请帮帮我

String mobileNo = phoneNumber1.getText().toString();

  try {
    SmsManager smsManager = SmsManager.getDefault();
    smsManager.sendTextMessage(mobileNo, null, "BAL", null, null);
    Toast.makeText(getApplicationContext(), "SMS Sent!",
                Toast.LENGTH_LONG).show();
  } catch (Exception e) {
    Toast.makeText(getApplicationContext(),
        "SMS faild, please try again later!",
        Toast.LENGTH_LONG).show();
    e.printStackTrace();
  }

在分析了Mlais MX28手机(带有定制ROM)的日志后,我发现了以下切换SIM卡发送短信的技巧。不幸的是,它似乎在全球范围内切换所有应用程序的SIM卡(我还没有找到一种方法来“保存和恢复”当前的设置)。此外,您可能还需要查找分配给每个sim卡的id(
sim\u id
)(可能是通过检查手机的日志输出;我也找不到一种编程方法)


我相信它也适用于其他与多SIM卡相关的操作,因为我设备上的设置数据库包含设置条目,如
gprs\u连接\u SIM卡设置
语音呼叫\u SIM卡设置
视频呼叫\u SIM卡设置
,等等。

我研究了SubscriptionManager类,找到了一个方法GetActiveSubscriptionInfo for SimslotIndex(simIndex)来获取特定sim插槽的subscriptionInfo。使用此subscriptionInfo,我们可以获取特定sim插槽的subscriptionId。使用subscriptionID,我们可以获得所需simSlot的SMSManager

这对我很有用:

public void sendSMS(final String number,final String text){
  final PendingIntent localPendingIntent1 = 
  PendingIntent.getBroadcast(mContext, 0, new Intent(this.SENT), 0);
  final PendingIntent localPendingIntent2 = 
  PendingIntent.getBroadcast(mContext, 0, new Intent(this.DELIVERED), 0);

if (Build.VERSION.SDK_INT >= 22)
{

    SubscriptionManager subscriptionManager=((Activity)mContext).getSystemService(SubscriptionManager.class);
    SubscriptionInfo subscriptionInfo=subscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(simIndex);
    SmsManager.getSmsManagerForSubscriptionId(subscriptionInfo.getSubscriptionId()).sendTextMessage(number, null, text, localPendingIntent1, localPendingIntent2);
}
SmsManager.getSmsManagerForSubscriptionId(subscriptionInfo.getSubscriptionId()).sendTextMessage(number, null, text, localPendingIntent1, localPendingIntent2);
}

其中simIndex为0表示sim1,1表示sim2

请参见@shayanpourvatan谢谢,但这不是我的ans。因为whatsApp在我的第二个sim卡的注册时间发送msg,所以我认为这是可能的。请帮助我不要认为WhatsApp发送短信,它只接收一条。@hitmaneidos,我想接收短信也是为了注册,就像WhatsApp一样,但它在双卡模式下不工作/接收,,,我希望你知道我在哪里遗漏了什么…这个案例有什么线索吗@AbdulWahab?此代码适用于双卡短信发送。谢谢。
ContentValues val = new ContentValues();
val.put("value", "here goes the preferred SIM ID");
getContentResolver().update(Uri.parse("content://settings/system"), val, "name='sms_sim_setting'", null);
public void sendSMS(final String number,final String text){
  final PendingIntent localPendingIntent1 = 
  PendingIntent.getBroadcast(mContext, 0, new Intent(this.SENT), 0);
  final PendingIntent localPendingIntent2 = 
  PendingIntent.getBroadcast(mContext, 0, new Intent(this.DELIVERED), 0);

if (Build.VERSION.SDK_INT >= 22)
{

    SubscriptionManager subscriptionManager=((Activity)mContext).getSystemService(SubscriptionManager.class);
    SubscriptionInfo subscriptionInfo=subscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(simIndex);
    SmsManager.getSmsManagerForSubscriptionId(subscriptionInfo.getSubscriptionId()).sendTextMessage(number, null, text, localPendingIntent1, localPendingIntent2);
}
SmsManager.getSmsManagerForSubscriptionId(subscriptionInfo.getSubscriptionId()).sendTextMessage(number, null, text, localPendingIntent1, localPendingIntent2);
}