2013-06-12 45 views
0

我有兩個類AlarmService.class,ReminderActivity.class。噹噹前時間等於鬧鐘時間時,AlarmService類會調用ReminderActivity。例如,如果我設置鬧鐘爲3.01,3.02,3.03,3.04 PM。我在3.01 PM獲得第一個ReminderActivity。問題是,3.02 PM ReminderActivity來自現有的一個,當我在ReminderActivity上工作,這是在下午3點1分。我需要在完成3.01PM後顯示3.02PM ReminderActivity。 3.03PM ReminderActivity在我完成3.02PM之後顯示,等等。如何實現這一目標?幫我。從隊列中顯示活動

在此先感謝。

+0

後用來啓動活動 –

+0

的代碼,如果(time_.equalsIgnoreCase(ALARM_TIME)){ \t \t \t \t \t \t \t \t \t \t意向I1 =新意圖( \t \t \t \t \t \t \t \t \t \t \t \t AlarmService.this, \t \t \t \t \t \t \t \t \t \t \t \t ReminderActivity.class); \t \t \t \t \t \t \t \t \t \t捆B =新軟件包(); \t \t \t \t \t \t \t \t \t \t b.putString( 「ID」,分裂[4]); \t \t \t \t \t \t \t \t \t \t b.putString( 「retrun_tag」, \t \t \t \t \t \t \t \t \t \t \t \t 「AlarmService」); \t \t \t \t \t \t \t \t \t \t i1.putExtras(B); \t \t \t \t \t \t \t \t \t \t i1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); \t \t \t \t \t \t \t \t \t \t AlarmService.this.startActivity(I1); –

+0

你應該嘗試像Intent.FLAG_ACTIVITY_CLEAR_TOP這樣的其他標誌,也許試着用一個靜態方法來管理你的ReminderActivity的單例,例如getInstance –

回答

0

充分利用

android:launchMode="singleTask" 

在清單中。這將確保只創建一個ReminderAcitivity實例。現在爲了實現它如何處理3:01,3:02等,您可以在您的活動中定義onNewIntent()函數。

問候

0

如果活動啓動首次從報警服務保存一個布爾到sharedpreferences財產。

如果該值爲true,則下一個報警事件,您可以:

  • 在AlarmService保存到SQLite數據庫中的數據。如果當前活動已完成(用戶按下完成按鈕,確定,...),則可以再次啓動相同的活動,然後再加載新數據。
  • 向ReminderActivity上的broadcastreceiver註冊發送意向,共享相同的操作。該活動會生成一個對話框,詢問用戶該做什麼。
  • 您從AlarmService生成通知。

如果我是你,我會使用通知,用戶可以決定啓動一個。

0

我看到兩種方式這樣做的:

A.Activity launchMode,您可以使用設置android:launchMode="singleInstance"。當你不需要擔心應用程序包含多少堆棧時,這很容易。只要不要忘記添加服務標誌Intent.FLAG_ACTIVITY_NEW_TASK

B. 如果堆棧的數量是一個問題,那麼你可以做到以下幾點: 在ReminderActivity寄存器中的排序,比默認更高的優先級廣播。在onCreate中註冊並註銷onDestroy()。在Manifest.xml中註冊另一個廣播接收器(我們稱之爲MyOrderedReceiver),默認優先級爲只應創建上述活動。然後,當觸發警報時,您將發送一條有線廣播:sendOrderedBroadcast(new Intent("myAction"));

如果該活動已經創建,那麼它將首先在其接收方中處理該意圖,並且它將中止該意圖,以使MyOrderedReceiver不會處理該意圖意圖從AlarmService發送。如果活動不在堆棧上,則MyOrderedReceiver將通過啓動ReminderActivity來處理該意圖。

如果您發現選項B有用且您需要更多,我可以在此上發佈更多實施細節。