将数据传递给由服务启动的 activity

Pass data to activity started by service

我一直在尝试使用 WakefulBroadcastReceiver 制作一个闹钟应用程序,它启动一个启动 SecondActivity 的唤醒服务 (IntentService)(闹钟在 MainActivity 中设置)。但是,我一直无法弄清楚如何将数据从 MainActivity 传递到 SecondActivity,即使使用 Intents。这是设置闹钟的代码:

Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
intent.putExtra("requestCode", 111);
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 111, intent, 0);
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarm.getTimeInMillis(), pendingIntent);

AlarmReceiver中onReceive的代码:

Intent service = new Intent(context, AlarmService.class);
intent.putExtra("requestCode", intent.getIntExtra("requestCode", 222));
startWakefulService(context, service);

报警服务中onHandleIntent的代码:

Context context = getApplicationContext();
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("requestCode", intent.getIntExtra("requestCode", 333));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent);

最后,在SecondActivity的onCreate中,我有如下代码:

Intent intent = getIntent();
Log.i("APP", "requestCode: " + intent.getIntExtra("requestCode", 444));

输出是 requestCode: 333,这是 AlarmService 的 onHandleIntent 中的 default/failsafe 值(而不是传递的原始请求代码,即 111)。我错过了什么?

编辑: onReceive 的代码应该是:

Intent service = new Intent(context, AlarmService.class);
service.putExtra("requestCode", intent.getIntExtra("requestCode", 222));
startWakefulService(context, service);

这就解决了问题。

Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("requestCode", intent.getIntExtra("requestCode", 333));

您已将您的 new 意图命名为与您在服务中收到的意图相同,因此在第二行中您引用的不是旧的,而是新的- 你试图初始化的那个 - 这个还没有这个额外的,所以它解析为默认值。更改为:

Intent activityIntent = new Intent(context, SecondActivity.class); // or any other name different than 'intent'
activityIntent.putExtra("requestCode", intent.getIntExtra("requestCode", 333));

除此之外,您的代码看起来还不错。