AndroidX ActivityResultContracts 包未找到/类未找到

问题描述 投票:0回答:3

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

而底层的startActivityForResult()和onActivityResult() API 可用于所有 API 级别的 Activity 类,它是 强烈建议使用中介绍的 Activity Result APIs AndroidX Activity 1.2.0-alpha02 和 Fragment 1.3.0-alpha02.

我想让我的用户在我的应用程序中拍照并将照片数据传回我的应用程序。我打算使用旧的 startActivityForResult() 但这个新方法看起来会解决很多问题并且更可靠,所以我想试一试。我应该能够调用

registerForActivityResult()
并传递给它一个内置的拍照合约 ActivityResultsContracts.TakePicture:

this.registerForActivityResult(new ActivityResultContracts.TakePicture(), ...);

但我得到:

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'

我尝试了

alpha02
beta01
,但它们似乎都没有文档中提到的类。

当我尝试在我的 java 文件顶部手动导入类时,AndroidStudio 也不认为该包存在。应该是

androidx.activity.result.contract.ActivityResultContracts.TakePicture
,但是我看到的是这样的:

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

android android-gradle-plugin android-appcompat androidx
3个回答
63
投票

来自引用的文档:

强烈推荐使用AndroidX Activity 1.2.0-alpha02和Fragment 1.3.0-alpha02引入的Activity Result APIs

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

appcompat
,而不是
activity
fragment

添加其中一个或两个:

implementation "androidx.activity:activity:1.2.0"
implementation "androidx.fragment:fragment:1.3.0"

(或任何更高版本)


16
投票

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

dependencies {
    implementation 'androidx.appcompat:appcompat:1.3.1'
    ...
}

0
投票

我遇到了同样的问题,但我没有添加任何东西,而是删除了可能导致问题的

appcompat
实现,因为在它之后一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.