...但是當古吉拉特被分成了多個字符串
當短信超過了最大消息長度(這取決於使用的字符集),它可以分解爲多個部分,並作爲多部分消息發送。您的情況就是這樣,以及您構建代碼的方式,看起來好像您正在接收幾個不同的文本。
當您收到一個多部分信息時,您將在onReceive()
中以多個SmsMessage
結尾。這些不是單獨的消息,而是單個消息的部分。各個機構必須連接起來組合一個完整的信息。
以下是如何檢索收到的郵件,任意數量的零件以及發件人號碼和郵件時間戳的簡單示例。
@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)));
...
}
與奇巧開始,Telephony.Sms.Intents.getMessagesFromIntent()
方法可用來處理Intent
額外包含消息。它返回一個SmsMessage
的數組,我們只需循環並提取必要的數據即可。
在KitKat之前,該方法並未公開,所以我們需要自己處理處理。如果您不支持KitKat之前的版本,則可以削減上述示例以刪除特定於這些早期版本的代碼。
我正在閱讀使用廣播接收器的應用程序中的短信,每當有新短信到達時,它都會顯示在我的應用程序中。它適用於英文短信,但當短信以古吉拉特語出現時,短信已被打破 –
「msgs」中的每個「SmsMessage」都不是一個不同的文本。它們是單個文本消息的一部分。在'for'循環中,連接'getDisplayMessageBody()'字符串以獲得完整的單個消息。將剩餘的東西移出循環。 –
感謝您的幫助,但如果我將其他東西從循環中移出,那麼我將如何訪問消息[i] !!!!你能否通過在代碼中提供相同的答案來幫助我。 –