Ошибка FileProvider

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

Все, что я пытаюсь сделать, это сделать снимок с помощью камеры, сохранить его и отобразить в ImageView.

Я следил за андроидным руководством выше и продолжаю получать ошибку (исключение NullPointerException) в строке:

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

Я знаю, что мне нужно настроить FileProvider в манифесте приложения, и "власти" должны соответствовать. Я не совсем понимаю, что я должен вводить в аргументы властей. Я скопировал весь код из учебника, включая файл res/xml/file_paths.xml. При необходимости задайте любые вопросы.

Благодарю!

Ответы

Ответ 1

Я, наконец, получил его на работу!

Не забудьте поставить тег провайдера INSIDE тега приложения в файле манифеста - это была моя ошибка (мой тег поставщика был OUTSIDE тега приложения) и причина, по которой вы получаете эту ошибку, которая в основном говорит, что не может найти определение провайдера,

Также убедитесь, что у вас есть правильные пути в 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 из моего первоначального вопроса.

Ответ 2

Я также забыл поставить <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>