阅读 Android 中最新收到的短信

Reading latest received sms in Android

我看到了这个问题的重复。在所有的问题中,他们都指定从收件箱中读取所有短信。

我想要的只是阅读最近收到的短信。

Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i < msgs.length; i++) {
            // Convert Object array
            msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            // Sender's phone number
            str += "SMS from " + msgs[i].getOriginatingAddress() + " : ";
            // Fetch the text message
            str += msgs[i].getMessageBody().toString();                
            str += "\n";
        }

它正在提取所有消息,所以我需要使用下面的哪一个代码来获取最新的短信,(我删除了下面代码中的 'for' 循环)

1

msgs[0] = SmsMessage.createFromPdu((byte[]) pdus[0]);

2

msgs[0] = SmsMessage.createFromPdu((byte[]) pdus[msgs.length-1]);

问题一: 上面两段代码,哪一段会给我最新消息,获取pdus[0] (1) 或者pdus[msg.length-1] ) (2)

问题 2: 在我的代码中,我将阅读最新的短信并搜索特定的关键字并执行相应的操作。

当我同时收到 2 条短信时(说 SMS1 和 SMS2)。我的 关键字 出现在 SMS1 中。

首先,SMS1 收到,一两秒后 SMS2 收到,所以我怀疑我的代码是否 将快速阅读 SMS1 并移动到阅读 SMS2 或当收到 SMS2 时它将跳过 SMS1 ?

如果我有任何不清楚的地方,请原谅我并发表评论,希望你能解决我的问题。提前致谢。 :)

你的问题很奇怪。

您首先提供的代码实际上只会提取一条消息。

Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i < msgs.length; i++) {
            // Convert Object array
            msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            // Sender's phone number
            str += "SMS from " + msgs[i].getOriginatingAddress() + " : ";
            // Fetch the text message
            str += msgs[i].getMessageBody().toString();                
            str += "\n";
        }

Question 1 - You must use the above code . It will fetch only one message not all the messages in inbox.

Question 2 - It will not skip