【问题标题】:Android FileProvider.getUriForFile throws null object exceptionAndroid FileProvider.getUriForFile 抛出空对象异常
【发布时间】:2019-03-13 14:56:50
【问题描述】:

我正在扩展我的适用于 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)'

很明显,我做错了什么,尽管我觉得我已经完全按照各种示例和教程进行操作。有人能告诉我我在这里缺少什么吗?

【问题讨论】:

    标签: cordova android-camera android-fileprovider


    【解决方案1】:

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

    <provider>...
    

    block 根本没有将其放入任何配置文件中。一旦我将&lt;provider&gt;... 包裹在

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

    阻止一切按预期工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      相关资源
      最近更新 更多