@ Майк М. и я нашли проблему с принятым ответом (см. Наши комментарии):
По сути, нет смысла проходить цикл 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
строковое значение соответствующей части сообщения, независимо от того, по какому индексу мы находимся, что делает бесполезным весь цикл прохождения по различным частям SMS-сообщения, поскольку оно будет просто установлено на последнее значение индекса Вместо этого мы должны использовать +=
, или как указано Майк 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
}
Просто поместите этот ответ на тот случай, если у кого-то возникнет такая же путаница.