首页 > 解决方案 > 用于图像捕获的文件提供程序配置

问题描述

我想用相机捕捉图像,我附加图像路径以进行捕捉输出。我想将图像images存储在外部存储中的文件夹中getExternalFilesDir

像这样:

/storage/emulated/0/Android/data/packagename/files/images/21_4_2021_14_23_24.png

我不明白应该如何查看文件提供程序路径以访问我的images文件夹,目前是:

<paths>
    <files-path name="internalFiles" path="/" />
    <external-path name="external" path="/" />
    <external-files-path name="exportFiles" path="/" />
    <external-media-path name="externalMedia" path="/" />
</paths>

标签: android

解决方案


文件路径.xml

<paths>
<external-files-path name="my_images" path="images/" />
</paths>

并确保您path在创建file. 喜欢:

    @Throws(IOException::class)
private fun createImageFile(): File {
    // Create an image file name
    val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date())


// Here I have used "images" because it is set as my path in file_paths.xml
   

 val storageDir: File? = requireContext().getExternalFilesDir("images")
    return File.createTempFile(
        timeStamp, /* prefix */
        ".jpg", /* suffix */
        storageDir /* directory */
    )
 }

否则exception将在uri传入时intent抛出

        val photoURI: Uri? = context?.let {
            try {
                createImageFile().let { file ->
                    FileProvider.getUriForFile(
                        it,
                        requireContext().applicationContext.packageName.toString() + ".provider",
                        file
                    )

                }
            }catch (e: Exception){
                Log.d("TAG==>>","${e.localizedMessage}")
                null
            }
        }
        photoURI?.let {
            //currentImageUri = it

            val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            intent.putExtra(MediaStore.EXTRA_OUTPUT, currentImageUri)
            startActivityForResult(intent,101) // replace with your request code
        }

推荐阅读