我有一個Android應用程序需要在整個一天偶爾醒來。如何將數據從BroadcastReceiver傳遞到正在啓動的活動?
爲此,我使用AlarmManager設置PendingIntent並使此觸發器成爲BroadcastReceiver。這個BroadcastReceiver然後啓動一個活動將UI帶到前臺。
所有上述似乎工作,活動正確啓動;但我希望BroadcastReceiver通知Activity它是由鬧鐘啓動的(而不是由用戶啓動)。要做到這一點,我想,從廣播接收器的的onReceive()方法來設置一個變量的意圖的額外捆綁,即:
Intent i = new Intent(context, MyActivity.class);
i.putExtra(wakeupKey, true);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
在的onResume()方法我的活動,我則尋找這個布爾變量的存在:
protected void onResume() {
super.onResume();
String wakeupKey = "blah";
if (getIntent()!=null && getIntent().getExtras()!=null)
Log.d("app", "onResume at " + System.currentTimeMillis() + ":" + getIntent().getExtras().getBoolean(wakeupKey));
else
Log.d("app", "onResume at " + System.currentTimeMillis() + ": null");
}
中的onResume()始終返回null的getIntent()getExtras()調用 - 我似乎沒有能夠通過在所有傳遞任何額外的意味。束。
如果我使用相同的方法綁定extras到觸發BroadcastReceiver的PendingIntent,但是額外事情通過很好。
任何人都可以告訴我,從BroadcastReceiver傳遞一個包到一個Activity有什麼不同,而不是從一個Activity傳遞包到BroadcastReceiver?我擔心我可能會在這裏做出非常明顯的錯誤...
奇妙而又奇妙...它剛開始工作(在模擬器),正是我所期待。重複了一下。我關閉了模擬器,重新啓動(沒有任何代碼更改或重新編譯),我又回到了舊的行爲(Activity啓動但沒有通過Bundle)。 我可以看到兩個運行的日誌仍然在前者中,Bundles正在通過,而後者沒有。 – 2010-04-11 11:46:45