@Mike M. und ich haben ein Problem mit der akzeptierten Antwort gefunden (siehe unsere Kommentare):
Im Grunde ist es sinnlos, die for-Schleife zu durchlaufen, wenn wir die mehrteilige Nachricht nicht jedes Mal verketten:
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();
}
Beachten Sie, dass wir gerade die msgBody
auf den String-Wert des jeweiligen Teils der Nachricht, egal auf welchem Index wir uns befinden, was den ganzen Sinn des Durchlaufens der verschiedenen Teile der SMS-Nachricht nutzlos macht, da er einfach auf den allerletzten Indexwert gesetzt wird. Stattdessen sollten wir verwenden +=
oder wie Mike bemerkte, StringBuilder
:
Alles in allem sieht mein SMS-Empfangscode so aus:
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
}
Ich möchte diese Antwort nur für den Fall geben, dass jemand anderes die gleiche Verwirrung hat.