Как построить PickVisualMediaRequest для ActivityResultLauncher

Я пытаюсь использовать API-интерфейсы Activity Result для обработки выбора одной фотографии для приложения, которое я разрабатываю. Я пытаюсь использовать один из предопределенных контрактов, чтобы все было просто. Итак, я пытаюсь использовать контракт 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 есть дефект видимости или я просто тупой сегодня?

4 ответа

После некоторой помощи от 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 жалуется на приведение типов, но код компилируется и работает должным образом. Очень странно.

По состоянию на 22 марта 2023 г. Есть исправление: просто обновите androidx.activity:activity до версии 1.7.0.

На самом деле, я тоже получил ту же ошибку, но когда я выполнил код, он скомпилировался, запустился и работал как положено.

вы можете обратиться к коду

PickMedia.launch(новый PickVisualMediaRequest.Builder() .setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE).build());

зайди сюда

Для меня этот код от поставщика (последний образец) работает (но да, ошибка все еще беспокоит, поэтому я бы тоже хотел найти стабильное решение).

Другие вопросы по тегам