【问题标题】:Sending sms to multiple people in android在android中向多个人发送短信
【发布时间】:2014-08-13 09:23:00
【问题描述】:

我想知道我是否可以使用 SmsManager 向多个人发送短信。我知道我可以通过联系人循环并单独发送短信,但我认为可能有办法做到这一点。

我使用的代码如下:

SmsManager.getDefault().sendTextMessage("PHONE_NOS", null,msg.getText().toString(), sentPI, deliveredPI);

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

为了那些迟到的人的利益,不可能向多人发送短信。正如 Bill Mote 所指出的,如果有这样的事情可能,就会有一个 API 将“数字列表”作为参数。 因此,唯一可能的解决方案是为数字设置一个迭代器并一次发送一个。

【问题讨论】:

    标签: android sms


    【解决方案1】:

    这里的 net-net-net 是它不能在不迭代循环并向 1 个收件人发送 1 条消息的情况下完成。

    我一个星期六花了 1/2 的时间来尝试做这件事。我无法让它与“;”、“”、“”或“\n”一起工作。我应该首先尝试硬编码由所有分隔符分隔的 2 个收件人,但我确实学到了有关 Android SDK 的宝贵经验:如果他们希望您一次发送给多个收件人,那么他们会接受 ArrayList 或字符串数组而不是单个字符串;)

    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 个地址怎么办?)。
    • 这只是我试图解决同样问题的一个例子。每条消息的收件人不能超过 1 个。 AddresseesPerMessage 设置为 10,因为我试图将 10 个收件人捆绑在一个分隔字符串中,例如“1234567890,2345678901,3456789012, ...”
    • 好的,所以我只需要将分隔符字符串设置为[逗号或我使用的任何其他分隔符],然后调用函数?我一定会试试这个!谢谢!
    • 你错过了我的回答和我的评论中说,它不能以你和我都想要的方式完成。
    • 嘘。那种不好的感觉!!您可以在浪费的数量上增加一天!嘘!
    【解决方案2】:

    这可能对您有所帮助。

    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() 方法在我尝试实现时找不到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    相关资源
    最近更新 更多