Raj*_*nan 3 android android-camera android-jetpack-compose
在我使用 Jetpack Compose 的应用程序中,如何使用现有的库存照片应用程序拍摄照片并存储它?Google 的文档Camera通过使用 提到了已弃用的 API Intent,但他们使用的是旧的视图系统。看起来更新的APICamera2和CameraXAPI 都是为了直接在应用程序中创建自定义相机界面。
您必须使用活动合同,请参阅本文了解详细信息
class ComposeFileProvider : FileProvider(
R.xml.filepaths
) {
companion object {
fun getImageUri(context: Context): Uri {
val directory = File(context.cacheDir, "images")
directory.mkdirs()
val file = File.createTempFile(
"selected_image_",
".jpg",
directory,
)
val authority = context.packageName + ".fileprovider"
return getUriForFile(
context,
authority,
file,
)
}
}
}
@Composable
fun ImagePicker(
modifier: Modifier = Modifier,
) {
var hasImage by remember {
mutableStateOf(false)
}
var imageUri by remember {
mutableStateOf<Uri?>(null)
}
val imagePicker = rememberLauncherForActivityResult(
contract = ActivityResultContracts.GetContent(),
onResult = { uri ->
hasImage = uri != null
imageUri = uri
}
)
val cameraLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.TakePicture(),
onResult = { success ->
hasImage = success
}
)
val context = LocalContext.current
Box(
modifier = modifier,
) {
if (hasImage && imageUri != null) {
AsyncImage(
model = imageUri,
modifier = Modifier.fillMaxWidth(),
contentDescription = "Selected image",
)
}
Column(
modifier = Modifier
.align(Alignment.BottomCenter)
.padding(bottom = 32.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Button(
onClick = {
imagePicker.launch("image/*")
},
) {
Text(
text = "Select Image"
)
}
Button(
modifier = Modifier.padding(top = 16.dp),
onClick = {
val uri = ComposeFileProvider.getImageUri(context)
imageUri = uri
cameraLauncher.launch(uri)
},
) {
Text(
text = "Take photo"
)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6334 次 |
| 最近记录: |