Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 短信息的挂起名称是否罕见?_Android_Sms - Fatal编程技术网

Android 短信息的挂起名称是否罕见?

Android 短信息的挂起名称是否罕见?,android,sms,Android,Sms,我找到的几乎所有发送SMS消息的示例都定义了字符串 String SENT = "SMS_SENT"; String DELIVERED = "SMS_DELIVERED"; 悬挂式帐篷的形状如下: PendingIntent sentIntent = PendingIntent.getBroadcast (this, 0, new Intent(SENT), 0); PendingIntent deliveryIntent = PendingIntent.getBroadcast (this

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

String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
悬挂式帐篷的形状如下:

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);
或者(使用它们的数组)


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

是的,这是真的,因为您实际上是在创建意图,所以您所要做的就是确保在创建广播接收器时,意图中指定的操作与意图过滤器中指定的操作相匹配。 您应该考虑到,挂起的意图在内部与常规意图没有区别,除非它将在一段时间后执行,甚至当应用程序的进程被终止时,挂起的内容本身将仍然可以从其他被赋予它的进程中使用

这是android文档中的重要部分:

PendingEvent本身只是对系统维护的令牌的引用,该令牌描述了用于检索它的原始数据。这意味着,即使其所属应用程序的进程被终止,PendingEvent本身仍然可以从已提供给它的其他进程中使用。如果创建应用程序稍后重新检索相同类型的PendingEvent(相同的操作、相同的意图操作、数据、类别和组件以及相同的标志),则它将收到表示相同令牌的PendingEvent(如果该令牌仍然有效),因此可以调用cancel()将其删除

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

但是回到你的问题,你可以毫无问题地指定任何动作,只要该动作不匹配为另一个broadcastreceiver注册的其他动作,即使如此,它也应该匹配动作和元数据,所以发生类似事情的可能性很低 希望这有帮助


问候

好的,酷。然而,使用更独特的字符串不是一个好主意吗?我如何知道其他应用程序没有使用相同的字符串,因此也没有收到我的通知。或者,反之亦然?很简单,如果您的操作与任何其他应用程序中指定的任何其他操作相匹配,则操作系统本身将显示一条消息,“例如,您可能在尝试查看视频时已经看到了它”,它会问您应该使用什么应用程序来处理该操作,例如YouTube或浏览器,尽管这有点困难,因为Android的内部意图通常包含元数据,并且应该完全匹配,以将其视为相同的意图……不要误会我的意思,但是如果答案是你正在寻找的,那么如果你把它标记为正确的话就很好了,所以下次人们可能需要时间来回答你的问题……当做别担心。所以我要等大约10分钟才能接受答案:)啊,所以如果有歧义,用户可以选择哪个活动接收意图。是的,我看到了,尽管在你提到的案例中,这是为了创建一个新的活动,而不是接收广播。
sms.sendMultipartTextMessage (phoneNumber, null, parts, sentIntents, deliveredIntents);