@Mike M. і ми знайшли проблему з прийнятою відповіддю (див. Наші коментарі):
В основному, немає сенсу проходити цикл 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
}
Просто виклавши цю відповідь там, у випадку, якщо хтось інший має таку плутанину.