如何取消从 startActivityForResult 调用的 Intent
Posted
技术标签:
【中文标题】如何取消从 startActivityForResult 调用的 Intent【英文标题】:How to Cancel Intent Called From startActivityForResult 【发布时间】:2017-06-23 02:02:11 【问题描述】:当您使用startActivityForResult
函数调用/启动活动时(在我的情况下,它是用于使用LoginManager.getInstance().logInWithReadPermissions(this, PERMISSIONS);
登录的Facebook 有没有办法取消意图,因此不会调用父活动onActivityResult
。我想为我的父活动添加超时机制,以防止子活动的长时间等待。(当 Facebook 被阻止/减速时,需要几分钟才能调用 onActivityResult
,所以我想通知用户可能超时的情况)
【问题讨论】:
【参考方案1】:您可以在完成活动之前setResult(TIMEOUT)
,并在onActivityResult
中查看结果。
此外,最佳做法是在子活动中设置超时机制(您可以在意图中传递一些信息)。
【讨论】:
感谢您的回答,但子活动不是我的活动,它是第三部分活动(实际上是 FacebookActivity,它处理 Facebook 登录并将结果发送回父活动)。所以我不能从儿童活动中拨打setResult(TIMEOUT)
。我需要告诉 android 操作系统“从子活动中取消我的请求”。【参考方案2】:
不,您不能取消它。但是,您可以跟踪您不再等待 onActivityResult()
回调的事实,以便在调用该方法时,您会记住您不在乎并忽略它。
【讨论】:
感谢您的回答,实际上我已经遵循/实施了您建议的相同方法。但正如我也调查过的那样,没有办法取消意图。【参考方案3】:我知道它有点老了,但我只是面临同样的问题,即 startActivityForResult(Intent, REQUEST_CODE) 启动的活动来自第 3 方,这意味着我无法手动完成它或在完成之前设置一个结果。
但幸运的是,android为此提供了一个活动方法,只需从启动第3方的父活动中调用它即可。
Activity.finishActivity(REQUEST_CODE)
REQUEST_CODE 是您之前发送给强调文本的代码
【讨论】:
以上是关于如何取消从 startActivityForResult 调用的 Intent的主要内容,如果未能解决你的问题,请参考以下文章