Android FileProvider.getUriForFile выдает исключение нулевого объекта - PullRequest
0 голосов
/ 13 марта 2019

Я расширяю свой плагин Cordova для Android, чтобы использовать камеру.После обширного прочтения различных статей для разработчиков Android по этой теме, а также обсуждений на этом форуме, я сделал следующее:

В файле моего плагина config.xml

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

вместе с

<resource-file src="src/android/xml/reviewpics.xml" 
  target="res/xml/reviewpics.xml" />

Для удобства я открыл скомпилированный APK в виде zip-архива и проверил, действительно ли существует файл res / xml / reviewpics.xml.

reviewpics.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
 <files-path name="camera" path="."/>
</paths>

для совместного использования корневого внутреннего хранилища приложения как camera.

В самом приложении я делаю следующее

File photo = new File(...);
 Uri uri = 
FileProvider.getUriForFile(cordova.getActivity(),
"com.example.app.camera",photo);

Однако, когда я компилирую, устанавливаю и запускаю это, я последовательно получаю сообщение

Попытка вызвать виртуальный метод 'android.content.res.XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData (android.content.pm.PackageManager, java.lang.String) 'для ссылки на нулевой объект

Очевидно, что я делаю что-то не так, хотя чувствую, что следовал различным примерам иучебники по этому вопросу, чтобыписьмо.Может кто-нибудь сказать мне, что мне здесь не хватает?

1 Ответ

0 голосов
/ 13 марта 2019

Я оставляю этот вопрос здесь и даю ответ для всех, кто сталкивается с подобными проблемами.Ключевым моментом, который следует помнить здесь, является контекст - плагин Cordova .Документация Cordova на plugin.xml в лучшем случае отрывочна и оставляет много деталей.Однако следует иметь в виду, что Cordova необходимо указать, какие именно файлы конфигурации проекта Android использовать для размещения любых инструкций, которые вы можете предоставить через plugin.xml.Я пропустил это из-за того, что мой блок

<provider>...

просто не попал ни в какой файл конфигурации.Как только я завернул <provider>... в

<config-file target="AndroidManifest.xml" parent="application">
...
</config-file>

блок, все работало так, как ожидалось!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...