You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用专属存储的定义是什么?React Native原生模块开发疑问

核心疑问解答

你对应用存储的误解

你误以为getFilesDir()指向的应用专属存储文件,可以直接通过file://格式的Uri传给外部APP,但实际逻辑是:

  • getFilesDir()确实是你的APP独有的内部存储目录,只有当前APP能直接读写,其他APP没有访问这个路径的权限。
  • 当你把file:// Uri传给相机这类外部应用时,外部APP拿到的是文件系统路径,但它没有权限访问你的内部存储目录,所以系统会直接拦截这种行为,抛出你看到的错误。

SDK版本的限制

这个错误确实是Android 7.0(SDK24)引入的StrictMode安全政策导致的:

  • 从SDK24开始,系统禁止跨应用传递file:// Uri,目的是强化存储沙箱机制,避免外部APP随意访问其他APP的私有文件。
  • 不管文件是不是你的专属存储,只要用file:// Uri跨APP传递,都会触发这个错误,必须改用content://格式的Uri,并通过FileProvider给外部APP临时授予访问权限。

和React Native无关

这个问题和React Native没有关系,这是Android原生的系统限制——不管是纯原生Android应用,还是RN的原生模块,只要在SDK24及以上的设备上跨APP传递file:// Uri,都会遇到这个问题。

相关文档参考

Android官方文档的「应用专属存储」章节明确说明:应用专属文件不能直接通过文件路径共享给其他应用;「FileProvider」章节则详细讲解了如何通过内容提供者机制安全共享文件,包括配置FileProvider、生成content:// Uri、添加临时权限的具体步骤。

内容的提问来源于stack exchange,提问作者MURIMO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:40:08