gpt4 book ai didi

java - 如何使用 PendingIntent 将发送的短信数据传递给 BroadcastReceiver?

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:51 25 4
gpt4 key购买 nike

我想在发送大量短信时向 BroadcastReceiver 传递一些数据,以指示发送/传递了哪条消息。

我尝试使用带有不同标志的标准 PendingIntent 但得到了错误的结果(BroadcastReceiver 总是获得 Intent 的第一个/最后一个额外内容)。有谁知道如何在使用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 消息的第一个 SMS_ID。请帮助我!

最佳答案

此代码不执行您想要的操作:

    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);

问题在于此代码每次都重用相同的 PendingIntent(其中包含 extras 中的第一个 SMS_ID)。

您需要做的是每次执行此代码时创建一个新的PendingIntent。为此,您需要执行以下一项(或多项)操作:

  • 每次调用 PendingIntent.getBroadcast() 时使用不同的 requestCode(第二个参数)
  • 每次在 Intent 中使用不同的 ACTION(您可以通过在使用 new Intent(...) 实例化 Intent 时在 ACTION 中包含 SMS_ID 来实现此目的

这将确保每次创建唯一的 PendingIntent 并解决您的问题。

关于java - 如何使用 PendingIntent 将发送的短信数据传递给 BroadcastReceiver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56877737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com