Dav*_*ead 8 java android kotlin activity-result-api activityresultcontracts
我正在尝试使用Activity Result API来处理为我正在开发的应用程序选择单张照片的情况。我正在尝试使用预定义的合同之一来使事情变得简单。因此,我尝试使用ActivityResultContracts.PickVisualMedia()合约。
我将活动结果启动器设置如下:
private ActivityResultLauncher<PickVisualMediaRequest> pickVisualMediaActivityResultLauncher;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
pickVisualMediaActivityResultLauncher = registerForActivityResult(
new ActivityResultContracts.PickVisualMedia(),
this::onPickVisualMediaActivityResult
);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建PickVisualMediaRequest并在此处启动 Activity Result Launcher:
private void onSelectNewPhotoButtonClick() {
PickVisualMediaRequest request = new PickVisualMediaRequest.Builder()
.setMediaType(new ActivityResultContracts.PickVisualMedia.ImageOnly())
.build();
pickVisualMediaActivityResultLauncher.launch(request);
}
Run Code Online (Sandbox Code Playgroud)
问题是 Android Studio 抱怨 ActivityResultContracts.PickVisualMedia.ImageOnly() 没有适当的可见性来使用,即使它是有效的 VisualMediaType 并且文档暗示它应该这样使用:

我真的找不到关于这个特定场景的任何代码示例。我错过了什么吗?API 是否存在可见性缺陷,或者我今天只是愚蠢?
Dav*_*ead 13
在 CommonsWare 的帮助下,我确定setMediaType()接受 Kotlin 对象实例。所以,我上面的坏函数应该是:
private void onSelectNewPhotoButtonClick() {
ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType = (ActivityResultContracts.PickVisualMedia.VisualMediaType) ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE;
PickVisualMediaRequest request = new PickVisualMediaRequest.Builder()
.setMediaType(mediaType)
.build();
pickVisualMediaActivityResultLauncher.launch(request);
}
Run Code Online (Sandbox Code Playgroud)
Android Studio 抱怨类型转换,但代码确实按预期编译和工作。很奇怪。
| 归档时间: |
|
| 查看次数: |
6943 次 |
| 最近记录: |