I am reading text messages in my application. Whenever an SMS arrives it comes to the app and is displayed.
It is working for English but when in the Gujarati langua
...but when gujarati has been broken into more than one string
When a text message exceeds the maximum message length (which depends on the character set used), it can be broken up into parts, and sent as a multipart message. That's what's happening in your case, and the way you've structured your code, it appears like you're receiving several different texts.
When receiving a multipart message, you will end up with multiple SmsMessage
s in onReceive()
. These are not individual messages, but the parts of a single message. The individual bodies must all be concatenated to assemble the one complete message.
The following is a simple example of how to retrieve received messages, for any number of parts, as well as the sender's number and the message's timestamp.
@Override
public void onReceive(Context context, Intent intent) {
String number = "unknown";
StringBuilder message = new StringBuilder();
long timestamp = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
SmsMessage[] msgs = Telephony.Sms.Intents.getMessagesFromIntent(intent);
number = msgs[0].getDisplayOriginatingAddress();
timestamp = msgs[0].getTimestampMillis();
for (int i = 0; i < msgs.length; i++) {
message.append(msgs[i].getDisplayMessageBody());
}
}
else {
Object[] pdus = (Object[]) intent.getSerializableExtra("pdus");
for (int i = 0; i < pdus.length; i++) {
byte[] pdu = (byte[]) pdus[i];
SmsMessage msg = SmsMessage.createFromPdu(pdu);
if (i == 0) {
number = msg.getDisplayOriginatingAddress();
timestamp = msg.getTimestampMillis();
}
message.append(msg.getDisplayMessageBody());
}
}
String report = String.format("SMS from %s%nMessage : %s%nSent : %s",
number,
message.toString(),
DateFormat.getDateTimeInstance()
.format(new Date(timestamp)));
...
}
Starting with KitKat, the Telephony.Sms.Intents.getMessagesFromIntent()
method is available to process the Intent
extra that contains the message. It returns an array of SmsMessage
that we simply need to loop over and pull the necessary data.
Before KitKat, that method was not publicly available, so we need to handle the processing ourselves. If you're not supporting versions prior to KitKat, then the example above can be pared down to remove the code specific to those earlier versions.