Android - 接收长短信(多部分)

Dan*_*ail 24 sms android

我有一个应用程序,它必须侦听特定的SMS.到目前为止容易.

但是当我收到消息时,它是多部分的.是否有正确的方式接收短信作为一条消息?

现在我的活动开始两次,对于短信的每一部分.我应该手动连接短信吗?

Seb*_*olm 22

查看gTalkSMS如何处理传入的SMS' 可能很有用,因为它似乎正确处理多部分消息.

  • 非常感谢链接,它真的很有帮助.链接中的RetrieveMessages方法帮助我收集所有多部分消息. (2认同)

om2*_*345 11

Bundle bundle  = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
            messages = new SmsMessage[pdus.length];
            for (int i = 0; i < pdus.length; i++)
            {
                messages[i] =
                    SmsMessage.createFromPdu((byte[]) pdus[i]);
            }

SmsMessage sms = messages[0];
try {
  if (messages.length == 1 || sms.isReplace()) {
    body = sms.getDisplayMessageBody();
  } else {
    StringBuilder bodyText = new StringBuilder();
    for (int i = 0; i < messages.length; i++) {
      bodyText.append(messages[i].getMessageBody());
    }
    body = bodyText.toString();
  }
} catch (Exception e) {

}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,对我有用.知道这在实践中有多好吗?例如,PDU可能在实际网络中的顺序错误吗?或者接收器可以使用part1触发一次,然后使用part2触发另一次? (3认同)
  • 多个发件人如何:对onReceive()方法的单个调用是否可以包含来自多个源的消息? (3认同)

Reu*_*ton 1

是的,您应该手动连接短信,但显然您不希望为每个消息段启动新的活动。

我建议将您的 ActivitylaunchMode属性设置为singleTask或 ,singleInstance这样就不会发生这种情况。

或者,让 接收您的短信,只有在收到完整消息后Service才会发送新短信。Activity