未找到 AndroidX ActivityResultContracts 包/未找到类

Ken*_*and 17 android android-appcompat android-gradle-plugin androidx

根据谷歌的这份关于启动活动以获得结果的文档

虽然底层的 startActivityForResult() 和 onActivityResult() API 在所有 API 级别的 Activity 类上都可用,但强烈建议使用 AndroidX Activity 1.2.0-alpha02 和 Fragment 1.3.0-alpha02 中引入的 Activity Result API。

我想让我的用户从我的应用程序中拍摄照片并将该照片数据返回到我的应用程序。我打算使用旧的 startActivityForResult() 但是这个新方法看起来可以解决很多问题并且更可靠,所以我想试一试。我应该能够调用registerForActivityResult()并传递一个内置的合约来拍摄一张名为ActivityResultsContracts.TakePicture的照片:

this.registerForActivityResult(new ActivityResultContracts.TakePicture(), ...);
Run Code Online (Sandbox Code Playgroud)

但我得到: error: package ActivityResultContracts does not exist

我已将此添加到我的 app/build.gradle 中:

// original include
//implementation 'androidx.appcompat:appcompat:1.1.0'

// suggestion from Google documentation
//implementation 'androidx.appcompat:appcompat:1.2.0-alpha02'

// AndroidStudio suggested a newer version was available
implementation 'androidx.appcompat:appcompat:1.2.0-beta01'
Run Code Online (Sandbox Code Playgroud)

我尝试了alpha02beta01并且它们似乎都没有文档中提到的类。

当我尝试在我的 java 文件顶部手动导入类时,AndroidStudio 也不认为该包存在。应该是androidx.activity.result.contract.ActivityResultContracts.TakePicture,但这是我看到的:

导入语句中 Android Studio 自动完成包列表的屏幕截图

如果这很重要,我正在使用 gradle 3.5.3。(每当我尝试升级到最新的 gradle 时,我的项目就会变得疯狂,所以我一直使用有效的版本。)

Com*_*are 36

从引用的文档中:

强烈建议使用 AndroidX Activity 1.2.0-alpha02 和 Fragment 1.3.0-alpha02 中引入的 Activity Result API。

这些都不在您的依赖项中,至少是您问题中的部分。你一直在操纵appcompat,不是activityfragment

添加以下一项或两项:

implementation "androidx.activity:activity:1.2.0"
implementation "androidx.fragment:fragment:1.3.0"
Run Code Online (Sandbox Code Playgroud)

(或任何更高版本)

  • @CommonsWare 我认为这是 IDE 或其插件的错误。似乎 IDE 无法帮助解决这个问题(这意味着它主要是一个视觉问题),但是构建、创建 APK 和启动 - 一切都正常......在这里写下这一点:https://issuetracker.google.com/issues/ 178403178和这里:https://www.reddit.com/r/android_devs/comments/l4qmo5/cant_use_registerforactivityresult_even_though_i/gkt2srk/?context=3 (3认同)
  • 即使我确实有 Gradle 文件中列出的两个依赖项,我也遇到了类似的问题(未解决的方法 `registerForActivityResult`)。然而,根据 Google 文档,它们适用于 alpha 版本 02。当我按照 [CommonsWare](/sf/users/8060181/) 建议将它们更改为 04 时,问题得到解决。多谢! (2认同)

tro*_*man 22

我也遇到了同样的问题。当我将 androidx.appcompat 从版本 1.2.0 升级到 1.3.1 时,问题就消失了。无需添加 androidx.activity 或 androidx.fragment 依赖项。

dependencies {
    implementation 'androidx.appcompat:appcompat:1.3.1'
    ...
}
Run Code Online (Sandbox Code Playgroud)