1

在片段上創建CountDownTimer。如果CountDownTimer正在運行,用戶可以在應用程序內部導航或者可以在應用程序外部進行導航。無論用戶何時離開CountDownTimer片段,頂部都應該有一個通知。如果用戶點擊通知,他應該被定向到CountDownTimer片段,並且定時器應該顯示正確的倒數。下面的代碼打開了創建CountDownTimer的活動。但它啓動了該Activity的新實例。有什麼辦法讓同一個活動的舊實例,以便我可以恢復從以前的狀態相同的活動?啓動通知上的現有活動單擊

  { 
       Notification.Builder noti = new Notification.Builder(getActivity()); 
       noti.setContentTitle("kick counter").setSmallIcon(R.drawable.mom_ic_launcher).setAutoCancel(true); 
       Intent notificationIntent = new Intent(getActivity(), KickCounterActivity.class); 
       notificationIntent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 
       PendingIntent contentIntent = PendingIntent.getActivity(getActivity(), 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
       noti.setContentIntent(contentIntent); 
       NotificationManager notifier = (NotificationManager)getActivity().getSystemService(Context.NOTIFICATION_SERVICE); 
       notifier.notify(1, noti.build()); 
      } 
+0

http://android-er.blogspot.in/2013/06/start-activity-once-notification-clicked.html – 2014-11-04 12:29:31

+0

@NaveenTamrakar鏈接的文章中的代碼會不會阻止正在創建的活動的新實例,這是OP想要的。 – 2014-11-04 12:55:20

+1

不要將'Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT'標誌添加到'Intent'。該標誌不會改變任何行爲。如果活動在特定情況下被置於前臺,則由Android設置。 – 2014-11-04 12:56:24

回答

2

看一看Intent -flags。我做這樣說:

final Intent openActivityIntent = new Intent(context, MainActivity.class); 
openActivityIntent.setAction("YOUR_ACTION"); 
openActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(openActivityIntent); 

在您的活動,您將收到的行動,如果你註冊一個監聽器,並在其上,例如行動導航到你的計時器。如果您需要更多的數據,你可以用openActivityIntent.putExtras(bundle)

0

你可以添加一個額外的意圖。在正在啓動的活動中,您可以添加類似這樣的內容。

//Notification Intent 
notificationIntent.putExtra("Fragment",1); 

//MainActivity.class 
Bundle extras = getIntent().getExtras(); 
if(extras.getInt("Fragment") == 1){ 
//Load Fragment Here 
} 

試試這個,讓我知道它是否工作。

+0

這不會阻止創建活動的新實例,這是OP想要執行的操作。 – 2014-11-04 12:52:56

0

使用此標誌

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
     | Intent.FLAG_ACTIVITY_SINGLE_TOP 
     | Intent.FLAG_ACTIVITY_NEW_TASK);