Ошибка FileProvider

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. При необходимости задавайте любые вопросы.

спасибо!

2 ответов


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

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

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


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