1

我已经在我的应用程序中实现了 GCM,并且根据从服务器接收到的有效负载,我正在启动一个名为 Activity(B) 的活动。

我的要求是,如果我在使用应用程序时从服务器接收到特定的有效负载,并假设我在 Activity (A) 上,那么它 (A) 应该关闭,并且只有 Activity(B) 应该在该应用程序的所有堆叠活动的实例中一旦活动 B 从我的 GCM 的 GCMIntentService 类开始,应该立即关闭。

我尝试过但没有奏效的事情。

Intent myIntent=new Intent(myContext,ActivityB.class);
myIntent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP);
myContext.startActivity(myIntent);

我也试过国旗

Intent.FLAG_ACTIVITY_NEW_TASK

与所有组合。

但没有运气。让我知道在声明我没有使用任何特殊参数(如 launchMode 或我的清单文件中的某些东西)的活动时,清单中的某处是否有任何可能我错了。

4

1 回答 1

1

您将需要使用以下代码启动应用程序的根活动(即:清单中包含的活动)ACTION=MAINCATEGORY=LAUNCHER

Intent intent = new Intent(context, RootActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("launchActivityB", true);

这将清除任何现有任务中的所有活动并启动RootActivity. 在RootActivity.onCreate()添加以下代码(在调用之后super.onCreate()

if (getIntent().hasExtra("launchActivityB")) {
    // We have been started so that we can launch ActivityB, finish and do that now
    finish(); // End this activity right now
    Intent intent = new Intent(this, ActivityB.class);
    startActivity(intent);
    return; // do no further processing in this activity
}

注意:尝试启动的原因ActivityB没有FLAG_ACTIVITY_CLEAR_TOP达到您想要的效果,因为它的工作方式FLAG_ACTIVITY_CLEAR_TOP。它从现有任务中清除所有活动,这些活动位于您尝试启动的活动的现有实例之上(在这种情况下)(在这种情况下ActivityB。由于您的任务中没有现有的实例ActivityB,因此此标志没有做任何事情。

于 2013-06-18T21:42:35.327 回答