【发布时间】:2019-07-03 20:48:45
【问题描述】:
我想在发送大量短信时将一些数据传递给BroadcastReceiver,以指示发送/传递了哪条消息。
我尝试使用带有不同标志的标准 PendingIntent,但得到了错误的结果(BroadcastReceiver 总是获得第一个/最后一个意图的附加信息)。有谁知道在使用SmsManager 发送短信时如何将数据传递给BroadcastReceiver?
发送短信的功能:
private void sendSMS(SmsRequest _smsRequest) {
Intent sentInt = new Intent(SmsNotificationSending.SENT);
sentInt.putExtra("SMS_ID", _smsRequest.getmId());
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sentInt, 0);
Intent delivInt = new Intent(SmsNotificationSending.DELIVERED);
delivInt.putExtra("SMS_ID", _smsRequest.getmId());
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, delivInt, 0);
registerReceiver(sendBroadcastReceiver, new IntentFilter(SENT));
registerReceiver(deliveryBroadcastReceiver, new IntentFilter(DELIVERED));
SmsManager
.getSmsManagerForSubscriptionId(1)
.sendTextMessage(_smsRequest.getmRecipientNumber(),
null,
_smsRequest.getmMessage(),
sentPI,
deliveredPI);
}
我的BroadcastReceiver 班级:
public class DeliveryReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Log.d("sms", "Broadcast received: " + intent.getAction());
Log.d("sms" ,"Sms was delivered" + intent.getIntExtra("SMS_ID", -1));
break;
case Activity.RESULT_CANCELED:
Log.d("sms" ,"Sms was not delivered");
break;
}
}
}
sendSms() 一个接一个地调用了很多次,在日志中我收到了许多接收到的广播,但只有第一条SMS_ID 的 SMS 消息。
请帮帮我!
【问题讨论】:
-
这似乎不可能。您使用不同的 ACTION 创建每个
PendingIntent,并且该 ACTION 是一些随机数(Long值)。然后,您注册一个接收器,当 ACTION 是固定字符串SENT或DELIVERED(无论它们是什么)时应该调用该接收器。由于这些东西不匹配,因此您的BroadcastReceiver不应该被调用! -
@DavidWasser 对不起,我不小心发布了我没有更改的代码,但谢谢。
标签: java android android-pendingintent smsmanager