moko-media
Библиотека moko-media позволяет работать с медиафайлами в общем коде: получать фото из галереи или с камеры, управлять видеоплеером.
Состав библиотеки
media— базовый модуль сMediaPickerController;media-compose— интеграция с Compose Multiplatform;media-test— утилиты для тестирования.
MediaPickerController
Основной класс для получения изображений. Использует PermissionsController из moko-permissions.
Общий код
class ViewModel(val mediaController: MediaPickerController) : ViewModel() {
fun onSelectPhotoPressed() {
viewModelScope.launch {
try {
val bitmap = mediaController.pickImage(MediaSource.CAMERA)
// фото получено
} catch (_: CanceledException) {
// пользователь отменил
} catch (error: Throwable) {
// нет разрешения или ошибка чтения
}
}
}
}
Android
val permissionsController = PermissionsController()
val mediaController = MediaPickerController(permissionsController)
val viewModel = ViewModel(mediaController)
viewModel.mediaController.bind(lifecycle, supportFragmentManager)
iOS
let permissionsController = PermissionsController()
let mediaController = MediaPickerController(
permissionsController: permissionsController,
viewController: self
)
let viewModel = ViewModel(mediaController: mediaController)
Compose Multiplatform
@Composable
fun Sample() {
val factory = rememberMediaPickerControllerFactory()
val picker = remember(factory) { factory.createMediaPickerController() }
val coroutineScope = rememberCoroutineScope()
BindMediaPickerEffect(picker)
Button(onClick = {
coroutineScope.launch {
val result = picker.pickImage(MediaSource.GALLERY)
// используем результат
}
}) {
Text("Выбрать фото")
}
}