如何为 ActivityResultLauncher 构造 PickVisualMediaRequest

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 抱怨类型转换,但代码确实按预期编译和工作。很奇怪。

在此输入图像描述

在此输入图像描述

  • ```PickVisualMediaRequest 请求 = new PickVisualMediaRequest.Builder() .setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE) .build(); `` 不需要转换,但 IDE 仍然显示错误。 (4认同)
  • 是否有可能以某种方式在 Android Studio 中隐藏此错误? (2认同)