在Android中向多人发送短信

10
我想知道是否有一种方式可以使用SmsManager向多个人发送短信。我知道可以通过遍历联系人并逐个发送短信来实现,但我认为可能有一种方法可以做到这一点。
下面是我使用的代码:
SmsManager.getDefault().sendTextMessage("PHONE_NOS", null,msg.getText().toString(), sentPI, deliveredPI);

PS:我已经尝试使用“;”作为分隔符。但唯一发生的事情就是它只发送短信给列表中的第一个人。

对于那些看到这条消息较晚的人,需要说明的是无法向多个人发送短信。正如Bill Mote所指出的那样,如果有这样一个可能,就会有一个API接受“数字列表”作为参数。因此唯一可能的解决方案是针对这些号码进行迭代,并逐个发送。

2个回答

10

总之,不能在不通过循环迭代并向每个收件人发送1条消息的情况下完成此操作。

我花了半个周六来尝试做这件事。 我无法使用“;”,“,”,“ ”或“\n”使其工作。 我应该首先尝试硬编码由所有分隔符分隔的2个收件人,但我确实从中学到了有关Android SDK的宝贵经验:如果他们想让您一次发送多个收件人,则会接受ArrayList或String数组而不是一个单独的字符串 ;)

protected void sendMsg(Context context, SmsMessage smsMessage) {
        SmsManager smsMgr = SmsManager.getDefault();
        ArrayList<string> smsMessageText = smsMgr.divideMessage(smsMessage.getMsgBody());
        PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, new Intent("SMS_SENT"), 0);
        PendingIntent deliveredPI = PendingIntent.getBroadcast(context, 0, new Intent("SMS_DELIVERED"), 0);
        int AddresseesPerMessage = 10;
        StringBuilder builder = new StringBuilder();
        String delim = "";
        for (ContactItem c:smsMessage.getAddresseeList()) {
            //  For every phone number in our list
            builder.append(delim).append(c.getPhoneNumber().toString());
            delim=";";
            if (((smsMessage.getAddresseeList().indexOf(c)+1) % AddresseesPerMessage) == 0 || smsMessage.getAddresseeList().indexOf(c)+1 == smsMessage.getAddresseeList().size()) {
                // using +1 because index 0 mod 9 == 0 
                for(String text : smsMessageText){
                    //  Send 160 bytes of the total message until all parts are sent
                    smsMgr.sendTextMessage(builder.toString(), null, text, sentPI, deliveredPI);
                }
                builder.setLength(0);
                delim="";
            }
        }
    }

你能解释一下你做了什么吗?比如AddresseesPerMessage是什么意思(如果我提供超过10个地址会怎样)? - Anand Sainath
这只是我尝试解决同样问题的一个例子。每个消息不能有多个收件人。AddresseesPerMessage被设置为10,因为我试图将10个收件人捆绑在一个分隔符字符串中,例如“1234567890,2345678901,3456789012, ...”。 - Bill Mote
好的,所以我只需要将分隔符字符串设置为[逗号或任何其他我使用的分隔符],然后调用函数就可以了吗?我一定会尝试这个方法的!谢谢! - Anand Sainath
天啊,这感觉太糟糕了!你又浪费了一天的时间!天啊! - Anand Sainath
不管怎样,非常感谢你,没有你的帮助,我会一直苦苦尝试让它工作。 - Anand Sainath
显示剩余2条评论

9
这可能对您有所帮助。
public void onCreate(Bundle savedInstanceState)
 {
    super.onCreate(savedInstanceState);

      setContentView(R.layout.main);
      btnSendSMS = (Button) findViewById(R.id.btnSendSMS);
      btnSendSMS.setOnClickListener(new View.OnClickListener()
      {
         public void onClick(View v)
          {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW);
             i.putExtra("address", "5556; 5558; 5560");
             // here i can send message to emulator 5556,5558,5560
             // you can change in real device
             i.putExtra("sms_body", "Hello my friends!");
             i.setType("vnd.android-dir/mms-sms");
             startActivity(i);
     }
     });
 }

请在AndroidManifest.xml中添加此行。
<uses-permission android:name="android.permission.SEND_SMS"/>

@Bill Mote,这段代码是否有效?因为我在尝试实现时找不到getAddresseeList()方法。 - Saty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接