Android - receiving long SMS (multipart)

后端 未结 5 1826
南旧
南旧 2020-11-30 03:04

I have an application, which has to listen for specific SMS. So far easy.

But when I receive the message, it\'s multipart. Is there a proper way to receive the SMS

相关标签:
5条回答
  • 2020-11-30 03:44

    Shorter solution:

    if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
                        Bundle bundle = intent.getExtras();           //---get the SMS message passed in---
                        SmsMessage[] msgs = null;
    
                        if (bundle != null) {
                            //---retrieve the SMS message received---
                            try {
                                Object[] pdus = (Object[]) bundle.get("pdus");
                                msgs = new SmsMessage[pdus.length];
                                String msgBody = "";
                                String msg_from = "";
                                for (int i = 0; i < msgs.length; i++) {
                                    msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                                    msg_from = msgs[i].getOriginatingAddress();
                                    msgBody += msgs[i].getMessageBody();
                                }
    
                            } catch (Exception e) {
        //                            Log.d("Exception caught",e.getMessage());
                            }
                        }
                    }
    
    0 讨论(0)
  • 2020-11-30 03:48

    Yes you should concatenate the SMS by hand, but obviously you don't want to be starting up a new activity for each message segment.

    I suggest setting your Activity's launchMode attribute to singleTask or singleInstance so that that doesn't happen.

    Alternatively have your SMS's received by a Service, which will fire up a new Activity only once it has a complete message.

    0 讨论(0)
  • 2020-11-30 03:51
    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) {
    
    }
    
    0 讨论(0)
  • 2020-11-30 03:52

    It may be useful to look at how gTalkSMS handles incoming SMS'es, as it appears to handle multipart messages correctly.

    0 讨论(0)
  • 2020-11-30 03:56

    I am not aware of a way to recive a multipart message as once. But if you have the right intent-filter setup you get only one Intent for more than one SMS. In fact, the Intent can contain SMS from different senders and/or zero or more multipart SMS .

    You could try this approach:

    Add an SmsReceiver Class with intent-filter android.provider.Telephony.SMS_RECEIVED in the Manifest.

    The classes onReceive Method will get an intent with a bundle of pdus. These pdu's can origin from different senders each and/or there can be more pdus from the same sender in case of a multipart text message, which you have to concatenate.

    0 讨论(0)
提交回复
热议问题