2011-12-13 24 views
3

有几个示例说明如何在高优先级的广播接收器中读取SMS,然后调用abortBroadcast()来停止意图到达其他应用程序的广播接收器。然而,他们都没有考虑到意图数据中可能存在多条SMS的情况,所以调用abortBroadcast()会基本上杀死所有SMS。Android短信已收到,仅中止广播,仅用于某些消息

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

有没有一种方法可以创建一个新的Intent,并根据收到的原始意图重新广播一个或多个SMS,以便我不想阻止的消息可以继续传递给任何期望它们的应用程序?

回答

2

我只是在研究这个相同的问题,我认为(不积极)答案很简单。

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

您可能认识下面的代码:

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

的PDU是“协议说明单位”,这是短信的行业标准。大消息需要被分解成几个较小的消息,这就是为什么它是一个对象数组的原因。

所以我认为答案是,当您调用abortBroadcast()时,您将永远不会取消多个文本消息。

+0

有趣......这是有道理的,只是如果它可以测试与否的问题,我想.... – Redth

+0

我试着用DDMS来速射关闭SMS到模拟器,看是否有会得到分组一起...我无法做到这一点。显然这不是一个确凿的测试,但我认为你的评估是正确的。感谢分享! – Redth