我正在尝试遵循Android代码here中的逻辑,该逻辑说明了如何实现“从相机获取图像”的意图。我希望你们中的一个聪明人能帮助我理解Google为什么以此方式开发意图。首先启动Intent的功能:
val REQUEST_TAKE_PHOTO = 1
private fun dispatchTakePictureIntent() {
Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent ->
// Ensure that there's a camera activity to handle the intent
takePictureIntent.resolveActivity(packageManager)?.also {
// Create the File where the photo should go
val photoFile: File? = try {
createImageFile()
} catch (ex: IOException) {
// Error occurred while creating the File
...
null
}
// Continue only if the File was successfully created
photoFile?.also {
val photoURI: Uri = FileProvider.getUriForFile(
this,
"com.example.android.fileprovider",
it
)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO)
}
}
}
}
请注意,此代码引用了另一个函数,该函数创建了文件和文件名:
var currentPhotoPath: String
@Throws(IOException::class)
private fun createImageFile(): File {
// Create an image file name
val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
val storageDir: File = getExternalFilesDir(Environment.DIRECTORY_PICTURES)
return File.createTempFile(
"JPEG_${timeStamp}_", /* prefix */
".jpg", /* suffix */
storageDir /* directory */
).apply {
// Save a file: path for use with ACTION_VIEW intents
currentPhotoPath = absolutePath
}
}
最后,如果您有意图并已完成Android开发,然后才知道需要OnActivityResult函数,那么这里是一个:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
val imageBitmap = data.extras.get("data") as Bitmap
imageView.setImageBitmap(imageBitmap)
}
}
因此,如果您运行此代码,它将失败,这是我的问题的根源,我希望有人,也许Android开发团队中的某人可以向我解释为什么这种流行的意图返回空数据。
明显的逻辑流程如下:
回调数据为null似乎很奇怪,我发现它确实令人困惑。我还有其他意图吗?为什么意图不返回我一些有用的数据,例如刚刚创建的文件的URI?
答案 0 :(得分:0)
如果您指定MediaStore.EXTRA_OUTPUT,则所拍摄的图像将被写入该路径,并且不会将任何数据提供给onActivityResult。 您可以从指定的位置读取图像。
也请检查您的权限。