已发送/已交付的短信:如何确定广播属于哪个短信?

4
在线程如何监控每个已发送短信的状态?中,描述了如何通过广播来监视已发送/已交付短信的状态。
然而,我还没有找到:如何确定广播属于哪个短信?据我所知,getResultData()和getResultExtras()中似乎没有任何信息。
我的用例是:我在循环中一个接一个地发送多个短信。 我想监视每条消息的状态/成功情况。 我如何知道哪个广播属于哪个消息。(将每个短信的传递延迟,直到我收到每个前一个短信的广播不是真正的选择)。
1个回答

5

Mathias,

参考您提供的问题中的代码。当您创建用于由PendingIntent启动的Intent时,不仅可以为其提供一个操作String,还可以向其中添加一个附加项以帮助确定它属于哪个短信...

Intent sentIntent = new Intent(SENT);
sentIntent.putExtra("smsNumber", someValue);
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentIntent, FLAG_UPDATE_CURRENT);

Intent deliveredIntent = new Intent(DELIVERED):
deliveredIntent.putExtra("smsNumber", someValue);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, deliveredIntent, FLAG_UPDATE_CURRENT);

通过这种方式,您应该能够在BroadcastReceiver内检索“smsNumber”值。

希望这可以帮助您!

Mathias Lin编辑: 重要的是使用pending intent传递FLAG_UPDATE_CURRENT标志,这样extras就会被传递并随广播一起到达。


谢谢你的提示,确实很有道理。然而,我尝试了一下,但是当我从意图中读取相关的额外信息(广播接收器onReceive方法中的第二个参数)时,它是null。事实上,intent.getExtras().size()仍然为0。似乎extras没有通过挂起的意图和广播传递到最后。 - Mathias Conradt
2
请注意:您需要在 pending intent 中传递 FLAG_UPDATE_CURRENT 标志,以便 extras 能够随广播一起传递。否则,extras 将不会随广播一起到达。 - Mathias Conradt
@Mathias Lin 如果您使用FLAG_UPDATE_CURRENT选项,则会删除先前Intent中的所有额外信息。如果只有一条短信被传送,则只有最后一条短信会被标记为已传送(即使它未被传送)。 - Maxim
对于我有效的解决方案(虽然不太优雅)是为每个消息使用不同的操作字符串。 - Maxim
3
@William,你尝试过发送多条短信吗?我遇到了接收多条短信广播接收器的问题。我接收到的所有短信都是相同的号码。有没有什么解决办法?非常感谢。 - vinothp
在广播后,您如何确定该消息是否已被传送?也许是在第二次访问时? - Cyph3rCod3r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接