我一直試圖使用WakefulBroadcastReceiver創建一個警報應用程序,該應用程序啓動啓動SecondActivity(警報設置在MainActivity中)的喚醒服務(IntentService)。但是,我一直無法弄清楚如何將數據從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);
在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);
而且能解決問題。
實際上,我發現我犯了一個非常愚蠢的錯誤 - 我在'onReceive'中寫了'intent.putExtra'而不是'service.putExtra',並且解決了這個問題。我會改變你指出的部分,只是爲了確保! – Technicolor