文件提供者错误

FileProvider error

https://developer.android.com/training/camera/photobasics.html

我只想用相机拍照,保存并在 ImageView 中显示。

我按照上面的 android 教程进行操作,但一直收到错误(NullPointerException):

Uri photoURI = FileProvider.getUriForFile(this, "com.example.android.fileprovider", photoFile);

我知道我需要在我的应用清单中配置 FileProvider,并且 "authorities" 必须匹配。我不太明白我应该在 authorities 参数中加入什么。我从教程中复制了所有代码,包括文件 res/xml/file_paths.xml。如有任何问题,请提出。

谢谢!

我终于让它工作了!

请记住将提供者标签放在清单文件中应用程序标签的内部 - 那是我的错误(我的提供者标签在应用程序标签之外),以及您收到此错误的原因,基本上是说找不到提供者的定义。

还要确保 .xml 文件中的路径正确。这是我的版本:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">

    <external-path
        name="my_images"   
        path="Android/data/org.projects.cameraapp/files/Pictures" />

</paths>

当然你必须改变你自己的应用程序的路径。

我实际的 Provider 看起来像这样:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="org.projects.cameraapp.fileprovider"          
    android:exported="false"
    android:grantUriPermissions="true">

    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />

</provider>

同样,您需要在自己的应用程序中更改权限值。

您可以在 GitHub 存储库中查看我最初问题的所有源代码。

我也忘了把<provider>放在<application>里面;我错误地把它们放在了我已经修复的同一水平上。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="zm.mytestapplication">

<application
    ...
    android:theme="@style/AppTheme">

    <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="zm.mytestapplication.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths"></meta-data>
    </provider>
</application>
</manifest>

file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" path="Pictures/zm/" />
</paths>

如果有人像我一样难以获得支持。v4.content.FileProvider你可以用这个代替它。

<provider
        android:name="androidx.core.content.FileProvider"
        android:authorities="com.camera.app.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths">

        </meta-data>
    </provider>