Android 如何通过PendingEvent向广播发送数据?

Android 如何通过PendingEvent向广播发送数据?,android,android-intent,broadcastreceiver,android-pendingintent,Android,Android Intent,Broadcastreceiver,Android Pendingintent,我正试图通过pendingent发送一些额外的数据,如: MyMessage message; //... Intent intent; SmsManager sms = SmsManager.getDefault(); intent = new Intent(Constants.SENT_PLAIN); intent.putExtra(Constants.EXTRA_RAW_ID, message.getId()); //putting long id (not -1L) PendingInt

我正试图通过
pendingent
发送一些额外的数据,如:

MyMessage message;
//...
Intent intent;
SmsManager sms = SmsManager.getDefault();
intent = new Intent(Constants.SENT_PLAIN);
intent.putExtra(Constants.EXTRA_RAW_ID, message.getId()); //putting long id (not -1L)
PendingIntent sentPI = PendingIntent.getBroadcast(activity, 0, intent, 0);
intent = new Intent(Constants.DELIVERED_PLAIN);
intent.putExtra(Constants.EXTRA_RAW_ID, message.getId());
PendingIntent deliveredPI = PendingIntent.getBroadcast(activity, 0, intent, 0);
sms.sendTextMessage(phoneNumber, null, message.getBody(), sentPI, deliveredPI);
然后在
广播中
尝试捕获数据:

@Override
public void onReceive(Context context, Intent intent) {
    String message, prefix = "";
    String action = intent.getAction();
    long id = intent.getLongExtra(Constants.EXTRA_RAW_ID, -1L);  //here I receive id=-1

    // blah-blah.... 
}
我看到调用了
Broadcast
onReceive()
,这意味着
Broadcast
以正确的方式注册,但附加项仍然是空的


有什么想法吗?

将数据放在您正在使用的意图中,作为附加内容。 您将在
广播
接收器的
onReceive
方法中获得此目的。 尝试按如下所示定义挂起的意图

PendingIntent sentPI = PendingIntent.getBroadcast(activity, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT);
如在上所述:

由于这种行为,为了检索PendingEvent,了解两个意图何时被认为是相同的非常重要。人们常犯的一个错误是创建多个PendingEvent对象,其意图仅在“额外”内容上有所不同,期望每次都获得不同的PendingEvent。这种情况不会发生。用于匹配的意图部分与定义的相同。如果使用两个根据等效的意图对象,则两个对象将获得相同的pendingent

有两种典型的处理方法

如果确实需要多个不同的PendingEvent对象同时处于活动状态 同时(例如用作两个同时显示的通知) 同时),那么您需要确保 把他们和不同的人联系起来是不同的 悬挂式帐篷。这可能是所考虑的任何意图属性 ,或提供给的不同请求代码整数 或

如果您一次只需要为任何一个 您将使用的意图,然后您也可以使用标志 或者取消或修改 无论当前挂起的内容与您的意图有何关联 供应


我在这里也做过类似的事情!!!先生你为我节省了几个小时的调试时间。非常感谢。令人惊叹的!谢谢你救了我一天,但听起来很奇怪,GetBroadcast即使我们的应用程序关闭了,这个对象还会在广播接收器中持续存在吗?@FarazAhmad是的,它会持续存在。