14

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

我要做的就是用相机拍照,保存并在 ImageView 中显示。

我按照上面的 android 教程进行操作,并不断收到错误消息(NullPointerException):

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

我知道我需要在我的应用程序清单中配置FileProvider并且“权限”必须匹配。我不太明白我应该在当局的论点中提出什么。我复制了教程中的所有代码,包括文件 res/xml/file_paths.xml。如有必要,请提出任何问题。

谢谢!

4

3 回答 3

28

我终于让它工作了!

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

还要确保 .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
    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 存储库中的所有源代码。

于 2016-08-04T13:03:27.017 回答
4

如果有人像我一样在 support.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>
于 2019-11-10T01:17:48.333 回答
1

我也忘了放在<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>

文件路径.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>
于 2017-03-22T18:17:19.717 回答