首页 文章

通过Android中的Intent将参数传递给BroadcastReceiver

提问于
浏览
9

我有一个应用程序,它使用AlarmManager设置一个警报,当它关闭时启动另一个Activity . AlarmManager采用PendingIntent并在指定时间到来时生成BroadcastReceiver类 . 我想知道是否有任何方法可以通过进入PendingIntent的Intent对象将参数传递给此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 . 我认为局部变量my_intent将是PendingIntent传递给onReceive的第二个参数,但显然这不太对 . 是否可以以这种方式在Activity和BroadcastReceiver之间传递参数(使用Intent.putExtra()),还是应该使用ContentProvider?

谢谢!

伊娃

4 回答

  • 2

    我有一个应用程序,它使用AlarmManager设置一个警报,当它关闭时启动另一个Activity .

    那是不好的形式 . 如果没有很好的理由(例如来电),请不要像这样突然弹出活动 . 如果用户正在做某事,例如TXTing或玩游戏或试图点击电话菜单的数字,该怎么办?

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

    是 . 但是,请记住,在创建 PendingIntent 时,您将需要使用 PendingIntent.FLAG_UPDATE_CURRENT ,以确保您在Intent上提供的任何新附加功能实际上已被使用 .

  • 1

    我遇到了类似的问题,但是在将它包装到PendingIntent之前我已经先填充了Intent . 但是,如上所述,我的问题的答案是我需要使用PendingIntent.FLAG_UPDATE_CURRENT标志 . 一旦我设置了旗帜,它就有效了!我希望这有助于其他人 . -Jeff

  • 5
    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);
        }
    }
    
  • 9

    是的,我认为可以在围绕PendingIntent的Intent的附加内容中传递基本Java类型和Serializable / Parceable类型的任何数据,然后使用传递给Broadcastreceiver的onReceive的Intent实例检索它们 . 你的方法对我来说没问题 .

    你得到的问题/错误是什么? “arg1”实例是否可序列化?

相关问题