根据this documentation from Google about launching an activity to get a result:
底层的startActivityForResult()和onActivityResult() 在所有API级别的Activity类上都可以使用API, 强烈建议使用引入的活动结果API AndroidX活动1.2.0-alpha02和片段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时,我的项目都会发疯,因此我一直坚持使用可行的版本。)
答案 0 :(得分:15)
引用的文档中:
强烈建议使用AndroidX活动1.2.0-alpha02和片段1.3.0-alpha02中引入的活动结果API。
这些都不在您的依赖项中,至少不在您的问题中。您一直在操作appcompat
,而不是activity
或fragment
。
添加以下一项或两项:
implementation "androidx.activity:activity:1.2.0-alpha04"
implementation "androidx.fragment:fragment:1.3.0-alpha04"
(此处引用了当前的Alpha版本)