通过Android中的Intent将parameter passing给BroadcastReceiver

我有一个应用程序,该应用程序使用AlarmManager设置一个警报,当它closures时,它会启动另一个Activity。 AlarmManager接受一个PendingIntent,并在指定的时间到达时产生一个BroadcastReceiver类。 我想知道是否有任何方法可以通过进入PendingIntent的Intent对象将parameter passing给此BroadcastReceiver?

基本上我想要做的是这样的:

Intent my_intent = new Intent(this, BroadcastService.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, my_intent, 0); my_intent.putExtra("arg1", arg1); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000), pendingIntent); 

我想能够在BroadcastReceiver的onReceive(Context,Intent)方法中检索arg1。 我认为局部variablesmy_intent是由PendingIntent传递给onReceive的第二个参数,但显然这不太正确。 是否有可能通过这种方式(使用Intent.putExtra())在Activity和BroadcastReceiver之间传递参数,或者我应该使用ContentProvider吗?

谢谢!

伊娃

Solutions Collecting From Web of "通过Android中的Intent将parameter passing给BroadcastReceiver"

我有一个应用程序,该应用程序使用AlarmManager设置一个警报,当它closures时,它会启动另一个Activity。

这是不好的forms。 如果没有很好的理由(例如,打来的电话),不要冒这样的通知。 如果用户正在做某些事情,比如TXTing,玩游戏或试图为手机菜单点击数字,该怎么办?

是否有可能以这种方式在Activity和BroadcastReceiver之间传递参数(使用Intent.putExtra())

是。 但是请记住,当您创buildPendingIntent.FLAG_UPDATE_CURRENT时,您将希望使用PendingIntent.FLAG_UPDATE_CURRENT ,以确保您在Intent上提供的任何新的额外参数实际上都已被使用。

我有一个类似的问题,但是我已经在将它包装到PendingIntent之前先填充了Intent。 但是正如上面指出的那样,我的问题的答案是我需要使用PendingIntent.FLAG_UPDATE_CURRENT标志。 一旦我设置标志,它的工作! 我希望这可以帮助别人。 -Jeff

 int code=1; Intent i2 = new Intent(StartAlarm); i2.putExtra("_id",code); class test extends BroadcastReceiver { @Override public void onReceive(Context context, Intent arg1) { int i=arg1.getIntExtra("_id",-1); } } 

是的,我认为可以将基本Javatypes和Serializable / Parceabletypes的任何数据传递给一个包裹在PendingIntent中的Intent的附加内容,然后使用传递给BroadcastReceiver的onReceive的Intent实例来获取它们。 你的方法看起来对我来说没问题。

你得到的是什么问题/错误? 是“arg1”实例的Serializable?