0

我发现的几乎所有发送 SMS 消息的示例都定义了字符串

String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";

PendingIntents 的形成方式如下:

PendingIntent sentIntent = PendingIntent.getBroadcast (this, 0, new Intent(SENT), 0);
PendingIntent deliveryIntent = PendingIntent.getBroadcast (this, 0, new Intent(DELIVERED0), 0);

最终为电话

sms.sendTextMessage (phoneNumber, null, message, sentIntent, deliveryIntent);

或(使用它们的数组)

sms.sendMultipartTextMessage (phoneNumber, null, parts, sentIntents, deliveredIntents);        

这些字符串是任意的吗?我能说的最好的就是你只需要在你的 BroadcastReceiver 中过滤它们,但实际的字符串是什么并不重要。真的吗?

4

1 回答 1

2

是的,确实如此,因为您实际上是在创建 Intent,所以您所要做的就是确保在创建广播接收器时 Intent 中指定的操作与 IntentFilter 中的操作匹配。您应该考虑到,挂起的意图在内部与常规意图没有区别,除了将在一段时间后执行,即使应用程序的进程被杀死,PendingIntent 本身仍可用于其他已给予它的进程

这是取自 android 文档的重要部分:

PendingIntent 本身只是对系统维护的令牌的引用,该令牌描述了用于检索它的原始数据。这意味着,即使它拥有的应用程序的进程被杀死,PendingIntent 本身仍可用于其他已给予它的进程。如果创建应用程序稍后重新检索相同类型的 PendingIntent(相同的操作、相同的 Intent 操作、数据、类别和组件以及相同的标志),它将接收表示相同令牌的 PendingIntent,如果它仍然有效,并且可以因此调用 cancel() 将其删除。

由于这种行为,重要的是要知道两个 Intent 何时被认为是相同的,以便检索 PendingIntent。人们犯的一个常见错误是创建多个 PendingIntent 对象,其 Intent 仅在其“额外”内容上有所不同,期望每次都获得不同的 PendingIntent。这不会发生。Intent 中用于匹配的部分与 Intent.filterEquals 定义的部分相同。如果您使用两个根据 Intent.filterEquals 等效的 Intent 对象,那么您将获得相同的 PendingIntent 对象。

但是回到您的问题,您可以毫无问题地指定任何操作,只要该操作与为另一个广播接收器注册的其他操作不匹配,即使如此,它应该在操作和元数据中匹配,所以类似的事情发生是安静的低希望这有帮助..

问候!

于 2013-10-15T22:59:37.423 回答