Android startActivity在后台打开最后一个应用程序,而不是所需的活动

Android startActivity在后台打开最后一个应用程序,而不是所需的活动,android,android-intent,Android,Android Intent,我得到了一个可以接收事件(基本上是来自后台服务的消息)的应用程序,当它接收时,我调用以下代码: Intent dialogIntent = new Intent(this, MainActivity.class); dialogIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

我得到了一个可以接收事件(基本上是来自后台服务的消息)的应用程序,当它接收时,我调用以下代码:

Intent dialogIntent = new Intent(this, MainActivity.class);
                dialogIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(dialogIntent);
此代码应该将应用程序返回到前端,以便用户能够处理事件

只有当我正在使用的应用程序也是用户使用的最后一个应用程序时,此代码才有效。该代码在以下情况下不起作用:

1) 用户暂停了应用程序,打开了另一个应用程序,然后又暂停了它,因此第二个应用程序是后台的最后一个应用程序-在这种情况下,最后一个应用程序将始终打开,即使我正在启动我的
MainActivity
。例如,如果我将我的应用程序移动到后台,打开Android的设置,然后收到一个事件,Android的设置屏幕将打开,而不是我的应用程序

2) 用户在另一个应用程序中。在这种情况下,应用程序将不会被带到前台


我怎样才能使特定的应用程序在任何情况下都从后台恢复?

使用启动器类别,如下所示:

Intent resumeIntent = new Intent(context, MainActivity.class);
resumeIntent.setAction(Intent.ACTION_MAIN);
resumeIntent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(resumeIntent);

同时在您的活动清单中添加android:launchMode=“singleTop”。

使用启动器类别如下:

Intent resumeIntent = new Intent(context, MainActivity.class);
resumeIntent.setAction(Intent.ACTION_MAIN);
resumeIntent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(resumeIntent);

还可以在活动清单中添加android:launchMode=“singleTop”。

您可以在活动清单中添加android:launchMode=“singleTop”。

您可以添加android:launchMode=“singleTop”在活动的清单中。

没有帮助OK实际上是两个答案的组合解决了问题没有帮助OK实际上是两个答案的组合解决了问题是两个答案的组合解决了问题。需要在活动的声明中添加singleTop,这两个答案的组合解决了这个问题。需要将singleTop添加到活动的声明中