@ মাইক এম এবং আমি স্বীকৃত উত্তরের সাথে একটি সমস্যা পেয়েছি (আমাদের মন্তব্য দেখুন):
মূলত, যদি আমরা প্রতিবার মাল্টিপার্ট বার্তাটি মনোযোগ দিয়ে না রাখি তবে লুপের মধ্য দিয়ে যাওয়ার কোনও অর্থ নেই:
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
}
অন্য কারও ক্ষেত্রে যেমন বিভ্রান্তি ঘটে তখন কেবল এই উত্তরটি বাইরে রেখে দেওয়া।