从最近和历史中排除活动

时间:2016-12-29 15:22:38

标签: android android-intent android-activity chrome-custom-tabs android-customtabs

实际上我有一个Android自定义标签的直接问题。 但是,我会概括我的问题。我们假设我有ActivityAActivityBActivityA - 是外部的,因此我们从Intent中启动它:

Intent intent = customTabsIntent.intent;
        intent.setData(requestUri);
        intent.putExtra(CustomTabsIntent.EXTRA_TITLE_VISIBILITY_STATE, CustomTabsIntent.NO_TITLE);
        mContext.startActivity(intent);

从这里我们看到ActivityA - 实际上是一个自定义标签活动。当事情完成后,我启动ActivityB。我希望ActivityA从任务历史记录中消失,我可以通过将Intent.FLAG_ACTIVITY_NO_HISTORY标记到我的意图来实现这一点。但是这种方法会导致问题,因为当用户切换到最近,或转到其他应用程序时 - ActivityA会永远消失。当然 - 这就是没有历史的旗帜。但我想要一个不同的流程,我希望ActivityA仅在ActivityB启动时消失。任何想法如何实现这一目标?

P.S。我需要完成ActivityA,它是通过意图启动的,我无法访问其代码而我无法调用finish() < / p>

2 个答案:

答案 0 :(得分:1)

我认为你不能通过使用NO_HISTORY标志来做到这一点,因为ActivityA正在进行启动而你无法控制它。

但是,您应该能够实现目标(无法通过覆盖ActivityB中的“返回”按钮,将ActivityA转回ActivityB并让它回归到任何目标在任务堆栈中位于ActivityA下面。

假设ActivityCActivityA的{​​{1}},您可以在ActivityB中执行以下操作:

@Override
public void onBackPressed() {
    // Direct user back to ActivityC
    Intent intent = new Intent(this, ActivityC.class);
    // Add flags to ensure that we reuse the existing instance of
    //  ActivityC and that we clear any other activities above ActivityC
    //  from the stack.
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                    Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
}

答案 1 :(得分:0)

您可以使用finish()方法清除任何活动。所以在开始另一个activity完成之前。

 Intent intent = customTabsIntent.intent;
            intent.setData(requestUri);
            intent.putExtra(CustomTabsIntent.EXTRA_TITLE_VISIBILITY_STATE, CustomTabsIntent.NO_TITLE);
            mContext.startActivity(intent);
        finish();     //add this to clear that activity