Android Intent FLAG_ACTIVITY_TASK_ON_HOME 按下后退键时不会 return 回家

Android Intent FLAG_ACTIVITY_TASK_ON_HOME doesn't return to home when pressing back

我有一个聊天应用遇到这种情况:

A - MainActivity

B - 聊天 activity

C - 前锋activity

假设我想将 Bill 的消息转发到 John 的聊天,我打开 A -> B -> C,在 C 上我必须 select 用户转发,所以我点击 John throw a新的 B 意图,现在在堆栈中我有 A-B-C-B,如果从 John 的聊天中我按下后退按钮我想返回 A(MainActivity),但实际上我返回 B(Bill 的聊天),这是一个问题,因为Chat activity 必须只有一个。 出于必要,聊天 activity 在清单中设置为 android:launchMode="singleTop",因为如果我在前台有一个聊天并且我点击 "new message" android 通知,当前聊天已关闭,新聊天已打开。阅读开发人员指南我发现 FLAG_ACTIVITY_TASK_ON_HOME,正如我可以理解的那样,我应该能够直接从 John 的聊天(B)返回到 MainActivity(A),但没有发生。

这是一个(滑动tab布局的MainActivity,Intent是从ListFragment Tab启动的activity)

    Intent intent = new Intent(getContext(), Chats.class);
    Bundle b = new Bundle();
    b.putString("nid", list_id.toString()); 
    b.putString("user_id_key", list_user_id.toString());
    b.putString("name", list_name.toString());
    b.putString("number", list_number.toString());
    intent.putExtras(b); 
    startActivityForResult(intent, 101);

这是 B(聊天 activity - AppCompatActivity)

    Intent intent = new Intent(getApplicationContext(), Forward.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    Bundle b = new Bundle();
    b.putString("forward_mess", MessText);
    b.putString("number", number);
    b.putString("conv_id", convId);
    intent.putExtras(b);
    startActivity(intent);

这是C(转发activity - AppCompatActivity)

    Intent intent = new Intent(getApplicationContext(), Chats.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_TASK_ON_HOME);
    Bundle b = new Bundle();
    b.putString("nid", sel_nid);
    b.putString("user_id_key", sel_user_receiver);
    b.putString("name", sel_name);
    b.putString("number", sel_number);
    b.putString("forward_mess", forward_mess);
    intent.putExtras(b);
    startActivityForResult(intent, 101);
    finish();

也尝试使用 FLAG_ACTIVITY_CLEAR_TOP,但这直接将我带到 A->B

已在聊天中使用 onActivityResult 方法解决 activity。

这里是正确的活动流程:

MainActivity -> startActivityForResult(chat_intent, 101);

聊天 -> startActivityForResult(forward_intent, 5);

设置onActivityResult方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //If is 5 means Forward activity was closed
    if (requestCode == 5) {
        // If 10 means a new Chat was opened, so this one must be closed
        if (resultCode == 10) {
            finish();
        }
    }
}

前进

startActivityForResult(chat_intent, 101);
setResult(10);
finish();