【发布时间】:2021-11-22 16:07:33
【问题描述】:
我只是想拍照并设置为ImageView
我找到了两种方法:
1) 使用ActivityResultContracts.TakePicture ()
这种方法的问题是我必须创建一个文件并传递 Uri 来调用启动器。由于新活动不会“属于”我的应用程序,因此我必须使用需要修改 manifest.xml 并创建一个新文件的 FileProvider:file_paths.xml
2) 使用ActivityResultContract.TakePicturePreview ()
使用此选项,我可以避免使用 FileProvider,并将捕获的图像通过 lambda 函数的位图传递,如下所示:
private val cameraLauncher =
registerForActivityResult(ActivityResultContracts.TakePicturePreview()) { imageBitmap ->
view?.findViewById<ImageView>(R.id.image)?.setImageBitmap(imageBitmap)
}
此解决方案的问题是返回的imageBitmap 质量非常低。
我想要什么
我只需要在 ImageView 中设置图像。出于这个原因,在我的数据流中,这个图像不应该存储在磁盘上。我不想使用第一个选项,因为我认为 FileProvider 会重载代码,并且我正在创建一个我永远不会使用的帮助文件。
有没有不使用 FileProvider 获取完整图像的简单解决方案?
【问题讨论】:
-
"这张图片不应该存储在磁盘上" -- 全分辨率照片很大,这就是为什么
ACTION_IMAGE_CAPTURE/ActivityResultContracts.TakePicture要求它们存储在磁盘上,并且“预览” " 方法(避免使用磁盘)会导致低分辨率图像。 “是否有一个简单的解决方案可以在不使用 FileProvider 的情况下获取完整图像?” - 并不真地。您可以集成 CameraX 或第三方相机库并自行实现相机功能。
标签: java android kotlin android-fileprovider