Android FileProvider.getUriForFile引发空对象异常

时间:2019-03-13 14:56:50

标签: cordova android-camera android-fileprovider

我正在扩展适用于Android的Cordova插件以使用相机。在广泛阅读了有关该主题的各种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 :(得分:0)

我将在此留下这个问题,并为遇到类似问题的任何其他人的利益提供答案。这里要记住的关键是上下文- Cordova插件Cordova documentation on plugin.xml最多是粗略的,并省略了很多细节。但是,请记住,有必要告诉Cordova仅使用哪个Android项目配置文件来放置您可能通过plugin.xml提供的任何指令。我没有这样做,结果是我的

<provider>...

block根本没有将其放入任何配置文件。将<provider>...包裹在

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

阻止一切正常运行!