从通知创建的活​​动返回主要活动

我正在尝试实现此处描述的行为,其中通知(或其他)在您的应用中启动“内部”活动,然后当用户按下它时进入我的“主页”活动。

Android文档说

在“后退”按钮的情况下,您应该通过在任务的后台堆栈中插入应用程序最顶层屏幕的完整向上导航路径,使导航更具可预测性。 这使得忘记进入应用程序的用户可以在退出之前导航到应用程序的最顶层屏幕。

有没有一个好方法来实际做到这一点? 关于Stackoverflow的其他问题建议启动主要活动,意图告诉它开始内部活动,但这似乎是一个巨大的黑客,我有点怀疑谷歌会在Gmail中使用,我认为有一个不错的方法,给定他们在倡导这种行为。

那么有一种非黑客的方法吗?

我知道实现这个目标的两种方法:

  1. 从通知启动的home activity开始您的home activity 。 这可能变得非常棘手,因为您必须区分并跟踪各种可能的切入点。
  2. 您始终从您的home activity开始,该home activity检查是否通过通知启动,然后启动notification activity 。 这确保了一致的入口点,当用户按下向上键时后备栈将存在。

问候。

此解决方案可以很好地解决此问题

 android:noHistory="true" 

有一个关于如何做到这一点的新指南,它提出了一些与上述答案略有不同的做法:

https://developer.android.com/guide/topics/ui/notifiers/notifications.html#NotificationResponse

注意,实际上不要在getPendingIntent为requestCode使用0 。 对我来说,任何数字都不是0,但0导致后退按钮才进入发射器。

尼斯。

但请注意,这不适用于3.0之前的(API级别之前的11级)系统,因为PendingIntent.getActivities()在那里不可用。

这对于构建一个从通知访问活动的后台堆栈(通过Intent)并使后退按钮与您的应用程序一致行为(例如,详细活动返回到列表活动)是相同的。

活动与任务相关联,该任务只是后台堆栈中的一组活动。 单击通知后打开新活动时,该活动将作为独立活动打开并进入新任务。 这意味着仅存在通知活动和父活动。

只需将活动的启动模式指定为清单文件中的“标准”,它就可以解决问题。

 Intent resultIntent = new Intent(getApplicationContext(), ResultActivity.class); PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(),0,resultIntent,PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(notId, mBuilder.build()); 

表现:

  < ---