Я пытаюсь создать приложение для будильника с помощью WakefulBroadcastReceiver, который запускает бодрствующий сервис (IntentService), который запускает SecondActivity (будильник установлен в 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);
Код для onReceive
в AlarmReceiver:
Intent service = new Intent(context, AlarmService.class);
intent.putExtra("requestCode", intent.getIntExtra("requestCode", 222));
startWakefulService(context, service);
Код для onHandleIntent
в AlarmService:
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);
Наконец, в onCreate
из SecondActivity , У меня есть следующий код:
Intent intent = getIntent();
Log.i("APP", "requestCode: " + intent.getIntExtra("requestCode", 444));
Выход requestCode: 333
, который был значением по умолчанию/отказоустойчивым в AlarmService onHandleIntent
(а не кодом исходного кода, который был равен 111). Что мне не хватает?
Edit: код для onReceive
должен быть:
Intent service = new Intent(context, AlarmService.class);
service.putExtra("requestCode", intent.getIntExtra("requestCode", 222));
startWakefulService(context, service);
И это устраняет проблему.
На самом деле, я заметил, что совершил очень тупые ошибки - я написал 'intent.putExtra' в' onReceive' вместо 'service.putExtra', и это решило проблему. Я изменю раздел, который вы указали, хотя, чтобы убедиться! – Technicolor