@ माइक एम और मुझे स्वीकृत उत्तर के साथ एक मुद्दा मिला (हमारी टिप्पणियाँ देखें):
मूल रूप से, लूप के माध्यम से जाने का कोई मतलब नहीं है, अगर हम हर बार मल्टीपार्ट संदेश को साझा नहीं कर रहे हैं:
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
:
सब सब में, यहाँ मेरा एसएमएस प्राप्त कोड जैसा दिखता है:
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
}
इस उत्तर को किसी अन्य भ्रम की स्थिति में होने पर बस वहीँ रख देना चाहिए।