如何为ActivityResultLauncher构造PickVisualMediaRequestforActivityResultLauncher

svmlkihl  于 2022-10-09  发布在  Android
关注(0)|答案(1)|浏览(329)

我正在尝试使用Activity Result APIs为我正在开发的应用程序处理一张照片的挑选。我正在尝试使用一个预定义的合同来使事情变得简单。因此,我尝试使用ActivityResultContracts.PickVisualMedia()合同。

我将活动结果启动器设置如下:

private ActivityResultLauncher<PickVisualMediaRequest> pickVisualMediaActivityResultLauncher;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    pickVisualMediaActivityResultLauncher = registerForActivityResult(
            new ActivityResultContracts.PickVisualMedia(),
            this::onPickVisualMediaActivityResult
    );
}

我正在尝试构造一个PickVisualMediaRequest并在这里启动活动结果启动器:

private void onSelectNewPhotoButtonClick() {
    PickVisualMediaRequest request = new PickVisualMediaRequest.Builder()
            .setMediaType(new ActivityResultContracts.PickVisualMedia.ImageOnly())
            .build();
    pickVisualMediaActivityResultLauncher.launch(request);
}

问题是Android Studio抱怨ActivityResultContracts.PickVisualMedia.ImageOnly()没有正确的可见性来使用,尽管它是一个有效的VisualMediaType,并且文档暗示它应该这样使用:

我真的找不到关于这个特定场景的任何代码样本。我是不是遗漏了什么?是API有可见性缺陷,还是我今天太傻了?

sd2nnvve

sd2nnvve1#

在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);
}

Android Studio抱怨类型转换,但代码确实按照预期进行了编译和工作。非常奇怪。

相关问题