Ошибка 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>