如何取消从 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的主要内容,如果未能解决你的问题,请参考以下文章

如何从客户端取消异步任务

如何从对话框中取消文件下载

通常如何从控件中取消连接事件?

如何从 Windows 服务 C# 取消关机

如何从 onPreExecute() 方法中取消 ProcessDialog

如何取消从 AudioServicesPlaySystemSound 开始的播放声音?