启动通知上的现有活动单击

时间:2014-11-04 12:24:06

标签: java android android-intent android-activity android-fragments

在片段上创建了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());
             }

4 个答案:

答案 0 :(得分:2)

查看Intent - 标志。我是这样做的:

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)

添加

答案 1 :(得分:0)

您可以尝试将活动的启动模式设置为“singleTop”,请参阅http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

或使用FLAG_ACTIVITY_SINGLE_TOP意图,请参阅http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_SINGLE_TOP

答案 2 :(得分:0)

您可以为意图添加额外内容。在正在启动的活动中,您可以添加类似的内容。

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

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

尝试一下,让我知道它是否有效。

答案 3 :(得分:0)

使用此标志

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