【发布时间】:2016-11-26 21:34:14
【问题描述】:
我一直在尝试使用 WakefulBroadcastReceiver 制作一个警报应用程序,该应用程序启动一个唤醒服务 (IntentService),该服务启动 SecondActivity(警报在 MainActivity 中设置)。但是,即使使用 Intents,我也无法弄清楚如何将数据从 MainActivity 传递到 SecondActivity。这是设置闹钟的代码:
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);
AlarmService中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 中的默认/故障安全值(而不是传递的原始请求代码,即111)。我错过了什么?
编辑:onReceive 的代码应为:
Intent service = new Intent(context, AlarmService.class);
service.putExtra("requestCode", intent.getIntExtra("requestCode", 222));
startWakefulService(context, service);
这样就解决了问题。
【问题讨论】:
标签: android android-intent android-pendingintent android-alarms