Jam*_*ack 5 android android-camera kotlin android-jetpack
我试图从相机中保存图像,但它一直返回错误。我以为图像没有被显示,但是当我查看文件系统时,我有很多文件,但它们的长度都为零。
这里只是设置了一些。
val pictureResult = remember { mutableStateOf<Boolean?>(null)}
val context = LocalContext.current
val cameraLauncher = rememberLauncherForActivityResult(ActivityResultContracts.TakePicture()) {
pictureResult.value = it
// $it is false
}
Run Code Online (Sandbox Code Playgroud)
这将创建屏幕截图中的文件。
fun createImageFile(extension:String): File {
// Create an image file name
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
val storageDir: File? = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
val imagePath: File = File(context.filesDir, directoryFromExtension(extension))
return File(imagePath, "justme${timeStamp}${extension}"
).apply {
myNewsCreatorViewModel.currentPhotoPath = absolutePath
}
}
Run Code Online (Sandbox Code Playgroud)
单击该按钮后,我会从上一个方法返回的文件开始执行这些步骤。
val uri = FileProvider.getUriForFile(context, "com.mine.fileprovider", file)
cameraLauncher.launch(uri)
Run Code Online (Sandbox Code Playgroud)
这是我设置 后的结果,想法是然后显示图像,或者如果文件未保存为 false,pictureResult.value我当前会显示一条短信。imageSaved
pictureResult.value?.let { imageSaved ->
run {
// imageSaved is false
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么,也不知道如何获取更多信息来了解为什么无法正确保存图像。
看来解决方案是添加:
val storageDir: File? = File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), directoryFromExtension(extension))
if(storageDir?.exists() == false && ".jpg" == extension) {
storageDir.mkdirs()
}
Run Code Online (Sandbox Code Playgroud)
我不确定它是否有帮助,但如果我也将其放在调用意图之前,它就会起作用。
context.grantUriPermission("com.mine.android", uri,
Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2068 次 |
| 最近记录: |