使用Dropbox身份验证时FLAG_ACTIVITY_CLEAR_TOP的奇怪行为

时间:2014-07-11 16:01:21

标签: android dropbox dropbox-api

用户从活动A开始,可以从那里进入活动B和C.

活动C使用Dropbox Core API在我们的应用和Dropbox之间同步数据,因此当用户转到C时,它会启动Dropbox身份验证机制,从而打开Chrome浏览器,用户可以在其中输入他的Dropbox凭据并允许该应用程序访问他的Dropbox内容。然后,浏览器再次调用活动C,同步发生。之后,我们希望再次显示活动A:

      ---->  C  ---> Chrome (Dropbox sign-in)
A  <
      ---->  B

选项1

我们尝试的第一个选项是在活动C中调用finish(),因此它会弹出活动堆栈并再次显示活动A.

问题:如果我们这样做,Android就不再显示活动A,而是浏览器,用户之前登录Dropbox。所以finish()时刻的堆栈似乎是:

A  ---->  C  ---> Chrome (Dropbox sign-in)  ---->  C

而不是

A  ---->  C

选项2

所以我们通过启动活动A和Intent的{​​{1}}来尝试它,所以所有活动都从堆栈中清除:

FLAGS_ACTIVITY_CLEAR_TOP

问题:如果用户转到活动B并按下后退按钮,则会再次显示活动C.

不是A ----> C ---> Chrome (Dropbox sign-in) ----> C | V A 意味着活动C被清除掉了吗?我怎样才能实现我的目标?

2 个答案:

答案 0 :(得分:0)

你需要做两件事:

  1. 您需要在启动活动C 的意图中使用FLAG_ACTIVITY_NEW_TASK

  2. 在您的清单文件中,活动C launchMode = "singleTop"

答案 1 :(得分:0)

使用选项1和2的组合似乎可行:

finish();
Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

这将完成活动C,同时创建一个显示活动A的新意图。

之后,活动堆栈似乎就像我们想要的那样:没有活动C再次弹出。