AndroidX ActivityResultContracts 包未找到/类未找到。

36
根据谷歌关于启动活动以获取结果的文档
尽管在所有API级别上Activity类中提供了底层的startActivityForResult()和onActivityResult() API,但强烈建议使用AndroidX Activity 1.2.0-alpha02和Fragment 1.3.0-alpha02引入的Activity Result APIs。
我想让我的用户从我的应用内拍照并将照片数据返回到我的应用。我原本打算使用旧的startActivityForResult()方法,但这种新方法似乎可以解决很多问题,并且更加可靠,所以我想试试。我应该能够调用registerForActivityResult()并传递一个名为ActivityResultsContracts.TakePicture的内置合同来拍照:
this.registerForActivityResult(new ActivityResultContracts.TakePicture(), ...);

但是我遇到了这个问题:错误:找不到 ActivityResultContracts 包 我已经将以下内容添加到我的 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'

我尝试了alpha02beta01,但似乎都没有文档中提到的类。

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

screenshot of Android Studio auto-complete package list in import statement

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

4个回答

67

从引用的文档中可得:

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

至少在你的问题中提到的部分中,这些API并不在你的依赖项中。你一直在操作的是appcompat,而非activityfragment

添加以下任意一个或两个依赖项:

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

(或任何更高版本)


1
哦哦哦... /捂脸。谢谢。我在我的appcompat实现行中看到了androidx,只是更新了版本号,甚至没有注意到它是特定于appcompat而不是activity包的。再次感谢! - Kenny Wyland
2
我曾经遇到过类似的问题(未解决的方法registerForActivityResult),即使我在Gradle文件中列出了这两个依赖项。然而,它们是alpha版本02,根据Google文档。当我按照CommonsWare的建议将它们更改为04时,问题得到了解决。非常感谢! - Franco
由于某些原因,我将这些库(以及它们的新版本)添加到了一些旧项目中,但是它无法找到函数,而在 POC 上却可以正常工作。怎么会这样呢?这是我添加的内容:implementation "androidx.fragment:fragment-ktx:1.3.0-rc01" implementation "androidx.fragment:fragment:1.3.0-rc01" implementation 'androidx.activity:activity:1.2.0-rc01' implementation 'androidx.activity:activity-ktx:1.2.0-rc01' - android developer
3
@CommonsWare 我认为这是IDE或其插件的一个bug。看起来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 - android developer
1
@androiddeveloper:我之前在使用Studio时也遇到过这种问题,即IDE会报错但项目构建正常。我不记得遇到过函数缺失的情况,但我确实见过Studio声称类不存在的情况,而实际上它们是存在的。¯\_(ツ)_/¯ - CommonsWare
显示剩余8条评论

21

我遇到了相同的问题。当我将androidx.appcompat从1.2.0版本升级到1.3.1版本时,问题解决了。不需要添加androidx.activity或androidx.fragment依赖项。

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

这个也起作用了!基本上,我尝试添加碎片库,但它可以很好地工作! - sud007
感谢您。您可以在https://developer.android.com/jetpack/androidx/releases/appcompat上找到最新版本。 - Ben Butterworth

0
我遇到了同样的问题,两个选项都对我无效。我在我的活动中导入了"import androidx.activity.result.contract.ActivityResultContracts;",它起作用了。
我正在使用"'androidx.appcompat:appcompat:1.6.1'"库。

implementation 'androidx.appcompat:appcompat:1.5.0'使用它,对我来说很有效。 - undefined

0
我有同样的问题,但是我没有添加任何内容,而是删除了可能导致问题的appcompat实现,之后一切都正常了。

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接