Как построить 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());
зайди сюда
Для меня этот код от поставщика (последний образец) работает (но да, ошибка все еще беспокоит, поэтому я бы тоже хотел найти стабильное решение).