Android 文件提供程序非法参数异常

Posted

技术标签:

【中文标题】Android 文件提供程序非法参数异常【英文标题】:Android File Provider Illegal Argument Exception 【发布时间】:2016-12-23 00:33:38 【问题描述】:

我正在使用文件提供程序将照片保存到给定的目的地。 我明白了:

java.lang.IllegalArgumentException:缺少 android.support.FILE_PROVIDER_PATHS 元数据 在尝试打开活动以从相机捕获图像时。

我的 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) 的教程进行操作

【问题讨论】:

可以添加教程链接吗 com.example 应该是 "com.example"。这样能解决吗? 不,只是复制出错 【参考方案1】:

我找到了解决方案。问题是我的授权名称没有以“.fileprovider”结尾。固定。

【讨论】:

您能否提供任何文档的链接以要求 FileProvider 权限名称必须以“.fileprovider”结尾? developer.android.com/reference/android/support/v4/content/… 这可能是 android 中的一个错误,他们后来修复了,因为我使用的是没有 .fileprovider 扩展名的授权。它工作正常。 有时订购很重要。我在我的授权名称中使用了 .provider 并且它被接受,只是如果我有超过 1 个提供者,那么应该首先声明文件提供者。【参考方案2】:

即使您对 appId 正确设置了权限并且设置了 FileProvider,您最好还是删除缓存,即删除 .gradle 和 .idea 文件夹,或者可能使缓存无效并重新启动,这样您就可以重新下载 gradle再次依赖,然后它对我有用:) 希望这可能对某人有所帮助

【讨论】:

级长,谢谢!!像魅力一样工作:)

以上是关于Android 文件提供程序非法参数异常的主要内容,如果未能解决你的问题,请参考以下文章

运行时自定义光标适配器错误,非法参数异常

获取 mediaMetadataRetriever.setDataSource 抛出非法参数异常

Android Gingerbread 上 LocalStorage 的非法访问异常

Jenkins Pipeline正在抛出非法争论异常

Android MySQL 异常错误

如何判断android用户拒绝了某项权限?