Я использую «устаревший код» для чтения входящих сообщений на Android. Код выглядит следующим образом:читать входящие SMS-сообщения в android
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
String smsSender ="";
String smsBody = "";
long smsTimestamp = 0L;
Object[] pdu_list = (Object[]) bundle.get("pdus");
for (Object pdu : pdu_list) {
SmsMessage msg = SmsMessage.createFromPdu((byte[])pdu);
if (msg == null) continue;
smsSender = msg.getOriginatingAddress();
smsBody += msg.getMessageBody().toString();
smsTimestamp = msg.getTimestampMillis();
}
...
Что делать, если pdu_list имеет более одного члена? Когда он содержит два или более PDU, они ссылаются на одно и то же длинное/конкатенированное SMS или на действительно разные сообщения?
В приведенном выше коде я конкатенирую тело текстового сообщения, но я не уверен, что это правильно.
Я недавно ответил, что в [этот пост] (http://stackoverflow.com/questions/33720240). –
Таким образом, цикл for имеет целью объединить одно сообщение *, разделенное на несколько PDU. В этом случае, я думаю, что отправитель одинаковый для каждого PDU, поэтому не важно извлекать его из первого или последнего, правильно? – pozzugno
Бинго. Ваш приемник будет получать только одно сообщение одновременно. Он может быть разделен на несколько частей, но все эти части содержат одно сообщение. –