@Mike M. dan saya menemukan masalah dengan jawaban yang diterima (lihat komentar kami):
Pada dasarnya, tidak ada gunanya menelusuri for loop jika kita tidak menyatukan pesan multi bagian setiap kali:
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();
}
Perhatikan bahwa kita hanya mengatur msgBody
nilai string dari masing-masing bagian pesan, apa pun indeks kita, yang membuat seluruh titik perulangan melalui bagian-bagian berbeda dari pesan SMS tidak berguna, karena itu hanya akan diatur ke bagian paling nilai indeks terakhir. Sebaliknya, kita harus menggunakan +=
, atau sebagai Mike mencatat, StringBuilder
:
Secara keseluruhan, inilah yang tampak seperti kode penerima SMS saya:
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
}
Hanya menempatkan jawaban ini di luar sana kalau-kalau ada orang yang memiliki kebingungan yang sama.