Android SMS收到,仅针对某些消息中止广播

时间:2011-12-13 14:57:29

标签: android sms android-intent broadcastreceiver

有几个例子说明如何在具有高优先级的广播接收器中读取SMS,然后调用abortBroadcast()以阻止意图到达其他应用程序的广播接收器。但是,它们似乎都没有考虑到intent的数据中可能存在多个SMS的事实,因此调用abortBroadcast()会基本上以该特定意图杀死所有SMS。

我正在尝试创建一个阻止来自某些数字的文本的应用程序,显然当我在一个意图中获得两条消息时,这是一个问题,一个来自被阻止的号码,一个来自未被阻止的号码。

有没有办法创建一个新的Intent并从收到的原始意图重新广播一个或多个SMS,这样我不想阻止的消息可以继续发送到任何应用程序期望它们?

1 个答案:

答案 0 :(得分:2)

我正在研究同样的问题,我认为(不是积极的)答案非常简单。

广播包含一个SmsMessage对象数组,因为需要将大型消息分解为多个较小的消息。但它仍然是一条短信。

您可能会识别以下代码:

Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] msgs = new SmsMessage[pdus.length];

PDU是"协议描述单元",它是SMS消息的行业标准。需要将大型消息分成几个较小的消息,这就是为什么它是一个对象数组。

所以我认为答案是,当你调用abortBroadcast()时,你永远不会取消多条短信。