如何在没有新意图的情况下从通知回到活动

从Android开发,我通过示例代码实现一个简单的通知,但在我的应用程序中,我不想新的意图并再次创建活动,我只想回到我的上一个活动(它是一个媒体播放器UI)。 如果我使用示例代码,它将创建一个新的活动

Intent resultIntent = new Intent(this, ResultActivity.class); 

我评论有关新意图的相关代码并收到通知,但不知道如何回到我上次的活动……

从长按主页键回到我的应用程序并触摸我的应用程序是好的。 我想要的就像这种行为。

bleow是来自Android Development的示例代码,我评论新的意图部分。

 NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!"); /*Intent resultIntent = new Intent(this, ResultActivity.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(ResultActivity.class); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_UPDATE_CURRENT ); mBuilder.setContentIntent(resultPendingIntent);*/ NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(mId, mBuilder.build()); 

[UPDATE]

我认为我需要为活动的意图和适当性设置标志。 因此,对于我想要回到我设定的活动

 android:launchMode="singleInstance" 

因为,我不想从意图开始新的活动,我只想要我的最后一个活动,所以我补充说

 Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY 

从文档我得到了使用Pendingintent.contentIntent它必须包含FLAG_ACTIVITY_NEW_TASK标志和使用此标志时,如果任务已经在您正在启动的活动运行,那么将不会启动新活动; 相反,当前任务将被简单地带到它最后一个状态的屏幕前面。所以我也添加

 Intent.FLAG_ACTIVITY_NEW_TASK 

但是从logCat,我仍然看到当我触摸返回活动的通知时,pendingintent仍然调用onCreate()函数而不是仅显示仍然“活着”的最后一个活动。

    如果你想从后台调用Activity,试试这个:

      Intent intent = new Intent(this, YourLauncherActivity.class); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); mBuilder.setContentIntent(pendingIntent); 

    如果您在主屏幕上单击通知,则应用程序的最后显示的活动将在不启动新内容的情况下到达前台。 如果活动被系统杀死,您将获得一个新活动。

    我使用了PendingIntent.getActivities而不是getActivity。 这在我的项目中运作良好。

     Intent backIntent = new Intent(this, HomeActivity.class); backIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Intent notificationIntent = new Intent(this, NextActivity.class); final PendingIntent pendingIntent = PendingIntent.getActivities(this, 1, new Intent[] {backIntent, notificationIntent}, PendingIntent.FLAG_ONE_SHOT); 

    SingleTop模式下,我使用此方法时没有明确定义根活动类:

     Intent intent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER) .setComponent(getPackageManager().getLaunchIntentForPackage(getPackageName()).getComponent()); 

    这将从通知中恢复上次活动:

     builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, 0)); 

    或者这可以从服务中恢复上一个活动:

     try { PendingIntent.getActivity(this, 0, intent, 0).send(); } catch (CanceledException e) { e.printStackTrace(); } 

    对我来说,这有效:

     .setContentIntent( PendingIntent.getActivity( context, 0, new Intent(context, YOUR_MAIN.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP ),PendingIntent.FLAG_ONE_SHOT)) 

    FLAG_ONE_SHOT:不要创建TWICE(与Intent.FLAG_ACTIVITY_CLEAR_TOP相关联| Intent.FLAG_ACTIVITY_SINGLE_TOP)