【发布时间】:2019-11-02 21:51:50
【问题描述】:
我想使用FileProvider 从相机获取照片。我完成了本教程中的所有操作,但 authority 参数导致错误。
教程:https://developer.android.com/reference/androidx/core/content/FileProvider
AndroidManifest 内部的提供者:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
provider_paths.xml:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="external_files" path="."/>
</paths>
更新:
这是创建文件功能:
private fun createImageFile(): File {
val timeStamp = SimpleDateFormat(
"yyyyMMdd_HHmmss",
Locale.getDefault()
).format(Date())
val imageFileName = "IMG_" + timeStamp + "_"
val image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
null /* directory */
)
return image
}
这是provider_paths.xml(我不想要外部路径,因为我不希望用户接受存储权限来使用相机):
<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path
name = "name"
path = "path" />
</paths>
这是打开相机功能:
private fun openCamera() {
val tempFile = createImageFile()
photoUri = Uri.fromFile(tempFile)
photoUri = FileProvider.getUriForFile(a, a.applicationContext.packageName + ".fileprovider", tempFile)
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
if (intent.resolveActivity(a.packageManager) != null) {
a.startActivityForResult(intent, REQUEST_CAMERA_NODE_MISUSE)
}
}
错误:Caused by: java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/my.package.name/cache/IMG_20190620_102915_7513574861671405500.jpg
【问题讨论】:
-
这里也添加清单文件
标签: android kotlin android-camera android-fileprovider