android - 快速连续发送的广播导致广播接收器出现问题
问题描述
我的 SMS 广播接收器有一个奇怪的问题。当用户快速连续发送多条短信时,广播接收器意图两次都发送最新信息。
例如:
User sends SMS ID 2
User sends SMS ID 3
接收者得到:
Mark ID 3 as Read
Mark ID 3 as Read
这是我的短信代码:
for (ignored in parts) {
sentReceivers.add(PendingIntent.getBroadcast(this, mId.toInt(), Intent(this, SmsSentBroadcast::class.java)
.putExtra("message_uri", messageUri.toString()).putExtra("message_id", mId), PendingIntent.FLAG_UPDATE_CURRENT))
if (delivery)
deliverReceivers!!.add(PendingIntent.getActivity(this, mId.toInt(), Intent(this, SmsDeliverBroadcast::class.java).putExtra("message_uri", messageUri.toString()).putExtra("message_id", mId), PendingIntent.FLAG_UPDATE_CURRENT))
}
smsManager.sendMultipartTextMessage(address, null, parts, sentReceivers, deliverReceivers)
解决方案
问题是mId.toInt()
在某些情况下不是唯一的,所以PendingIntent.FLAG_UPDATE_CURRENT
要覆盖它。
现在mId.toInt()
每次都是独一无二的,广播按预期工作
推荐阅读
- swift - 如何将粒子系统附加到节点的“底部”
- python - 从 Python 中的子组获取基本统计信息
- docker - 从 docker 镜像中删除环境变量
- javascript - 使用 React 过渡组组件构建轮播时,我缺少什么?
- tensorflow - 如何扩展我的 Keras 层的暗淡并避免使用 Lambda 层
- wordpress - 如何删除我网站上的所有出站链接?
- android - 带有标签布局的Android导航抽屉片段
- angular - 如何更新 Firebase 文档而不覆盖现有值
- javascript - Javascript 创建一个对象来存储所有数据并显示信息
- java - 从网站获取价值,但 java 代码不起作用。怎么修?