@ Майк М. и я обнаружили проблему с принятым ответом (см. Наши комментарии):
По сути, нет смысла проходить цикл for, если мы не объединяем составное сообщение каждый раз:
for (int i = 0; i < msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
msg_from = msgs[i].getOriginatingAddress();
String msgBody = msgs[i].getMessageBody();
}
Обратите внимание, что мы просто устанавливаем msgBody
в строковое значение соответствующей части сообщения, независимо от того, по какому индексу мы находимся, что делает всю точку циклического прохождения по различным частямСМС сообщение бесполезно, так как оно будет просто установлено на самое последнее значение индекса.Вместо этого мы должны использовать +=
, или, как отметил Майк, StringBuilder
:
В общем, вот как выглядит мой код получения SMS:
if (myBundle != null) {
Object[] pdus = (Object[]) myBundle.get("pdus"); // pdus is key for SMS in bundle
//Object [] pdus now contains array of bytes
messages = new SmsMessage[pdus.length];
for (int i = 0; i < messages.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); //Returns one message, in array because multipart message due to sms max char
Message += messages[i].getMessageBody(); // Using +=, because need to add multipart from before also
}
contactNumber = messages[0].getOriginatingAddress(); //This could also be inside the loop, but there is no need
}
Просто выложить этот ответ на тот случай, если у кого-то возникнет такая же путаница.