【问题标题】:is onActivityResult fundamentally broken?onActivityResult 从根本上破坏了吗?
【发布时间】:2017-01-24 02:01:23
【问题描述】:

它的一些实现,以及看似一些设备,似乎永远不会返回等于 -1 的 RESULT_OK,而只是返回一个误导性的 0,同时在 Intent extras 中包含所有必要的数据

我已经看到很多 Google 示例代码不再对 resultCode 执行条件,但是他们可以在不破坏任何内容的情况下弃用它,因为 Google 倾向于弃用完全非功能性的方法,因为他们更喜欢他们的新名称,他们可能会重载一个新的 onActivityResult,从而根本没有将 resultCode 作为方法参数。

我想知道是否有技术解释或博客文章说明该特定消息传递协议似乎只是失败了,文档中没有任何更新说“嘿也许 不要 依赖在 resultCode 上遵循任何押韵或理由"

【问题讨论】:

  • 为什么 0 具有误导性?是RESULT_CANCELED
  • "它的一些实现,以及看似一些设备,似乎永远不会返回等于 -1 的 RESULT_OK,而只是返回一个误导性的 0" - 大概,您启动的应用程序没有调用 @ 987654322@,或用RESULT_CANCELED 拨打setResult()。你有任何相反的证据吗? “我已经看到很多 Google 示例代码根本不再对 resultCode 执行条件” - 链接,或者它没有发生。 :-)
  • @CommonsWare 最好的例子(不是我今天遇到的那个)是我已经看到相机和画廊意图按预期运行并且仍然返回结果被取消,但仍然有一个 URI 并正确创建文件以及请求继续所需的所有内容,同时仍设置 requestCode 已取消
  • 如果“相机...意图”是指ACTION_IMAGE_CAPTURE,相机应用程序不应返回Uri。除此之外,假设您指的是ACTION_IMAGE_CAPTUREACTION_GET_CONTENT 之类的东西,“相机和图库意图”由应用程序处理,无论是由设备制造商、第三方还是谷歌提供。其中一些应用程序可能存在错误这一事实并不表示onActivityResult() 存在错误。

标签: android deprecated onactivityresult startactivityforresult


【解决方案1】:

结果代码值是由特定活动的实现定义的合同。 Android 本身定义的唯一协定是结果代码是一个整数。

Android 为成功 (RESULT_OK) 和失败 (RESULT_CANCEL) 定义了简单的常量,但由 Activity 决定是否要使用这些常量、出于何种目的、使用不同的值,或者甚至不使用设置结果代码(在这种情况下默认为RESULT_CANCEL)。在许多情况下,简单的成功或失败都不够完整,活动会返回其他 int 值。

因此,简短的回答是您需要查阅活动的来源以查看它的作用(或文档,但不太可能在那里定义合同)。

【讨论】:

    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多