Android 如何从通知状态栏打开最后一个活动?

Android 如何从通知状态栏打开最后一个活动?,android,android-activity,notifications,Android,Android Activity,Notifications,我想通过点击状态栏中的通知打开上次启动的活动。假设我启动了一个活动A(我的应用程序的主要活动),该活动会向通知状态栏发送通知。活动A还打开一个活动B,B打开另一个活动C。在C中,我按下主页按钮。现在我想再次转到我的应用程序,所以我从通知栏点击通知(由一个用户发送)。在这里,通知应该启动活动C,因为它是上次打开的 我搜索了一下,但没有找到正确的答案。提前感谢。由于我在搜索此内容后没有得到任何答案,我停止了尝试,但就在几天前,我开始再次尝试,并找到了解决方案。:)我把它放在这里 但首先,我只是想重新

我想通过点击状态栏中的通知打开上次启动的活动。假设我启动了一个活动A(我的应用程序的主要活动),该活动会向通知状态栏发送通知。活动A还打开一个活动B,B打开另一个活动C。在C中,我按下主页按钮。现在我想再次转到我的应用程序,所以我从通知栏点击通知(由一个用户发送)。在这里,通知应该启动活动C,因为它是上次打开的


我搜索了一下,但没有找到正确的答案。提前感谢。

由于我在搜索此内容后没有得到任何答案,我停止了尝试,但就在几天前,我开始再次尝试,并找到了解决方案。:)我把它放在这里

但首先,我只是想重新定义我的问题,它是::“从状态通知栏将后台任务放到前台”即,当我按home按钮将我的应用程序放到后台,然后使其显示在前台时,所有活动都应该按照它们在应用程序堆栈中的顺序到达前台

为此,我需要一个悬而未决的意图,无论何时被激发,都会将我的应用程序带到前台

在这里,当我的应用程序启动时,状态栏上会显示一条通知,直到我的应用程序在设备上运行为止

这是我试过的代码::

NotificationManager nm = (NotificationManager) getSystemService(context.NOTIFICATION_SERVICE);
Notification notification = new Notification();
notification.flag = Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR;

Intent nIntent = new Intent();

final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

final List<RecentTaskInfo> recentTaskInfos = am.getRecentTasks(1024,0);
String myPkgNm = getPackageName();

if (!recentTaskInfos.isEmpty()) {
     RecentTaskInfo recentTaskInfo;
     final int size = recentTaskInfo.size();
     for (int i=0;i<size;i++) {
         recentTaskInfo = recentTaskInfos.get(i);
         if (recentTaskInfo.baseIntent.getComponent().getPackageName().equals(myPkgNm)) {
             nIntent = recentTaskInfo.baseIntent;
             nIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         }
     }
 }
 PendingIntent pi = PendingIntent.getActivity(this, 0, nIntent, 0);
 notification.setLatestEventInfo(getContext(), "some Title", "some text", pi);
 nm.notify(0,notification); 
NotificationManager nm=(NotificationManager)getSystemService(context.NOTIFICATION_服务);
通知通知=新通知();
notification.flag=notification.flag_持续_事件| notification.flag_否_清除;
意图九=新意图();
最终ActivityManager am=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
最终列表recentTaskInfos=am.getRecentTasks(1024,0);
字符串myPkgNm=getPackageName();
如果(!recentTaskInfos.isEmpty()){
RecentTaskInfo RecentTaskInfo;
final int size=recentTaskInfo.size();

对于(int i=0;i几天前,我为我的问题找到了非常简单的解决方案。我们不需要迭代
最近的任务
,获取我们的任务,然后通过它获取
baseIntent
,我们可以做如下简单的事情:

Intent notificationIntent = new Intent(context, MainActivity.class);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
notificationIntent.setAction(Intent.ACTION_MAIN);
baseIntent
包含与上述
Intent
相同的参数。因此,与其从
recentTasks
获取
baseIntent
,不如使用上述代码

然后,此
通知意图
将被传递到
挂起内容
,以供进一步使用

提供:
MainActivity
是我们启动应用程序时的第一个活动,在AndroidManifest.xml中,它必须包含
CATEGORY\u LAUNCHER
ACTION\u MAIN

IntentFilters
,您是否尝试过:

final Intent intent = new Intent(context, YourActivity.class)
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
上面的代码指示Android打开最后一个活动,无论它是主活动还是首选活动[当前在前台],您首先用来在通知栏中创建/启动图标

ACTION\u MAIN
CATEGORY\u启动器
分别参考您的
AndroidManifest.xml
文件中的
指令。

始终适用于我

显示 通知意图
为什么不将其设计为在意图中传递一个额外字符,然后活动相应地处理它。问题与此问题相关,因为必须在打开activityContent之前完成工作。activity_服务应为上下文…无法编辑,因为我需要至少6个字符的更改:|@Foobar:根据需要进行更改建议。;)不错。但我想说添加你必须添加的功能就像一个符咒,我使用了一个登录活动,它根据一些参数打开另一个活动。现在,当用户点击通知打开应用程序时,它现在会重新打开应用程序,而不堆叠活动!我想添加,使用android:launchMode=“singleTop”在清单中,使用Intent.FLAG_ACTIVITY_NEW_任务在Intent中。
launchMode="singleTop" #For Launcher activity
never use "singleTask" as a launchMode
set no launchMode for other activities. (if not needed)
Intent notificationIntent = new Intent();
notificationIntent.setClass(this, LaucherActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);