因此,一切正常,良好的相机正在打开,如果没有权限,权限对话框也会打开,但图像不会显示在图像视图中。因为我在 result.data?.data
上得到 null这是我为捕获的图像创建路径并打开相机的功能
fun displayCamera(activity: Activity) {
val destPath: String? = Objects.requireNonNull(
Objects.requireNonNull(activity).getExternalFilesDir(null)!!
).absolutePath
val imagesFolder = File(destPath, activity.resources.getString(R.string.app_name))
try {
imagesFolder.mkdirs()
val imgFile = File(imagesFolder, Date().time.toString() + ".jpg")
val imagePath = FileProvider.getUriForFile(
activity, "com.example.shoppinglist" + ".provider", imgFile
)
val intent = Intent(ACTION_IMAGE_CAPTURE)
intent.putExtra(EXTRA_OUTPUT, imagePath)
cameraResult.launch(intent)
} catch (e: Exception) {
e.printStackTrace()
}
}
2.这是我的registerForActivity结果变量
private val cameraResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
binding.profilepic.setImageURI(result.data?.data)
}
}
3.这是我在单击按钮时调用此函数的代码
if (checkPermissions(this@RegistrationActivity)) {
displayCamera(this@RegistrationActivity)
} else {
requestPermission(requestMultiplePermissionLauncher)
}
您的代码似乎没问题,但如果您将其与静态包名称和存储权限以及不同的 Android 版本集成,有时
FileProvider
会出现问题。
您可以尝试下面的代码,该代码工作正常,并且还有助于管理存储,因为它不会存储图像,它会直接为您提供从我们打开的相机意图中捕获的图像的位图,然后显示在您的内部
imageView
通过从启动器获取位图数据的结果。
只需使用以下代码更改您的代码即可。
private fun displayCamera() {
val intent = Intent(ACTION_IMAGE_CAPTURE)
cameraResult.launch(intent)
}
cameraResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
val imageBitmap = result.data?.extras?.get("data") as Bitmap
binding.profilepic.setImageBitmap(imageBitmap)
}
}