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);