Java 如何使用PendingEvent将发送的SMS消息的数据传递给广播接收器?
我想在发送大量短消息时,将一些数据传递给广播接收器,以指示发送/传递的消息 我尝试使用带有不同标志的标准Java 如何使用PendingEvent将发送的SMS消息的数据传递给广播接收器?,java,android,android-pendingintent,smsmanager,Java,Android,Android Pendingintent,Smsmanager,我想在发送大量短消息时,将一些数据传递给广播接收器,以指示发送/传递的消息 我尝试使用带有不同标志的标准PendingIntent,但结果不正确(BroadcastReceiver总是获得意图的第一个/最后一个额外内容)。是否有人知道如何在使用smsmsmanager发送短信时将数据传递给BroadcastReceiver 发送短信的功能: private void sendSMS(SmsRequest _smsRequest) { Intent sentInt = new I
PendingIntent
,但结果不正确(BroadcastReceiver总是获得意图的第一个/最后一个额外内容)。是否有人知道如何在使用smsmsmanager
发送短信时将数据传递给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);
}
MyBroadcastReceiver
类别:
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\u 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);
问题在于,此代码每次都重用相同的pendingent
(它在extras中具有第一个SMS_ID)
每次执行此代码时,您需要创建一个新的pendingent
。为此,您需要执行以下一项(或多项)操作:
- 每次调用
时,请使用不同的pendingent.getBroadcast()
(第二个参数)requestCode
- 每次在
中使用不同的操作(当您使用Intent
newintent(…)实例化
时,可以通过在操作中包含SMS\u ID来执行此操作)Intent
这将确保每次都创建唯一的
pendingent
s,这将解决您的问题。这似乎是不可能的。您使用不同的操作创建每个pendingent
,并且该操作是一些随机数(Long
值)。然后,您注册了一个接收器,当操作是固定字符串时,应该调用该接收器。已发送
或已发送
,无论它们是什么。由于这些内容不匹配,您的广播接收器
永远不应该被调用!@DavidWasser对不起,我无意中发布了代码,我没有更改该内容,但谢谢。谢谢很多时候,你比我快一点,我刚开始自己写答案,因为我在两个月前解决了这个问题:D