- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 Android 中,如果我想读取传入的 SMS,我会使用 SmsMessage.createFromPdu
,但这会返回一个 SmsMessage
数组。这是为什么?为什么不只是一个 SmsMessage
?是因为长消息可以分成几条吗?如果是这样,是否意味着我可以指望所有这些 SmsMessage
都具有相同的起始地址?
最佳答案
经过大量研究,结果如下:
是的,您收到的这些消息是较大消息的分解部分。SmsMessage
数组包含彼此可能相关或不相关(不同的发件人)的消息。为什么 Android 会把它们混为一谈?我不知道。您应该始终遍历它们并按 SmsMessage.getDisplayOriginatingAddress()
对它们进行分组。然后,对于每组消息,从 SmsMessage.getDisplayMessageBody()
附加它们的正文以重建更大的消息。
这是来自 GTalk 应用程序源的示例(感谢@hungryghost):
private static Map<String, String> RetrieveMessages(Intent intent) {
Map<String, String> msg = null;
SmsMessage[] msgs;
Bundle bundle = intent.getExtras();
if (bundle != null && bundle.containsKey("pdus")) {
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus != null) {
int nbrOfpdus = pdus.length;
msg = new HashMap<String, String>(nbrOfpdus);
msgs = new SmsMessage[nbrOfpdus];
// There can be multiple SMS from multiple senders, there can be a maximum of nbrOfpdus different senders
// However, send long SMS of same sender in one message
for (int i = 0; i < nbrOfpdus; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
String originatinAddress = msgs[i].getDisplayOriginatingAddress();
// Check if index with number exists
if (!msg.containsKey(originatinAddress)) {
// Index with number doesn't exist
// Save string into associative array with sender number as index
msg.put(msgs[i].getOriginatingAddress(), msgs[i].getDisplayMessageBody());
} else {
// Number has been there, add content but consider that
// msg.get(originatinAddress) already contains sms:sndrNbr:previousparts of SMS,
// so just add the part of the current PDU
String previousparts = msg.get(originatinAddress);
String msgString = previousparts + msgs[i].getMessageBody();
msg.put(originatinAddress, msgString);
}
}
}
}
return msg;
}
关于android - 为什么 `SmsMessage.createFromPdu` 返回一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24175050/
我应该将什么作为第二个参数 传递给 createFromPdu() 方法, SmsMessage currentMessage = SmsMessage.createFromPdu((byte[])
在 Android 中,如果我想读取传入的 SMS,我会使用 SmsMessage.createFromPdu,但这会返回一个 SmsMessage 数组。这是为什么?为什么不只是一个 SmsMess
我正在尝试使用以下代码读取收到的短信,它在 API 级别 23 以下工作,但在 API 级别 23 中,createFromPdu 方法已弃用。在谷歌文档中它有一个 alternate method但
码 package com.yasharkhosravi.applicationhack; import android.content.BroadcastReceiver;
目标:(注意:选择的答案生成一个 GSM (3gpp) PDU)CDMA (3gpp2) please refer here 创建一个可以传递给 SmsMessage.createFromPdu(by
我是一名优秀的程序员,十分优秀!