安卓文件提供者非法参数异常

14

我正在使用文件提供程序将照片保存到指定的目标位置。 我得到了以下错误信息:

java.lang.IllegalArgumentException: Missing android.support.FILE_PROVIDER_PATHS meta-data while trying to open activity to capture image from camera.

我的manifest.xml文件如下:

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example"
android:exported="false"
android:grantUriPermissions="true">
    <meta-data
    android:name="android.support.FILE_PROVIDER_PATHS"
    android:resource="@xml/paths" />
</provider>

我的 paths.xml 文件:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="content" path="Android/data/com.my_package_name/files/" />
</paths>

以及Java代码:

File externalFilesDirectory = this.getExternalFilesDir(null);
File imageFile = File.createTempFile(
        imageFileName,
        ".jpg",
        externalFilesDirectory
);
Uri photoURI = FileProvider.getUriForFile(this, "com.example", imageFile);

最后一行给出了异常信息。我在这里缺少什么?我已经按照官方Android开发网站的教程进行操作 (https://developer.android.com/training/camera/photobasics.html)。


你能添加教程链接吗? - Imran Ali
com.example 应该翻译为 "com.example"。这样可以解决问题吗? - Imran Ali
抱歉,只是复制时出现了错误。 - Michał
2个回答

19

我找到了解决方案。问题在于我的权限名称没有以 ".fileprovider" 结尾。已修复。


你能提供任何文件要求FileProvider权限名称必须以".fileprovider"结尾的文档链接吗? - anticafe
https://developer.android.com/reference/android/support/v4/content/FileProvider.html#ProviderDefinition - Arst
这可能是 Android 中的一个错误,后来他们修复了,因为我正在使用没有 .fileprovider 扩展名的 Authority。它可以正常工作。 - Henry
3
有时候顺序很重要。我的权限名称中使用了“.provider”,并且被接受了,只是如果我有多个提供程序,那么文件提供程序应该首先声明。 - Ashish John

1
即使您已经正确设置了应用程序ID的权限,并且已经设置了FileProvider,最好还是删除缓存,即删除.gradle和.idea文件夹,或者可能无效地清除缓存并重新启动,这样可以让您重新下载gradle依赖项,然后它对我有用:) 希望这可以帮助某人

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接