0

Я пытаюсь создать приложение для будильника с помощью 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); 

И это устраняет проблему.

ответ

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

Вы назвали ваш новый Намерение же, как один ваш полученной на службе, так во второй строке вы ссылаетесь не старый, но новый - тот, который вы пытается инициализировать - у этого еще нет этого дополнения, поэтому он разрешает значение по умолчанию. Изменение:

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

Кроме того, ваш код выглядит нормально.

+0

На самом деле, я заметил, что совершил очень тупые ошибки - я написал 'intent.putExtra' в' onReceive' вместо 'service.putExtra', и это решило проблему. Я изменю раздел, который вы указали, хотя, чтобы убедиться! – Technicolor

 Смежные вопросы

  • Нет связанных вопросов^_^