- 大家好 *
环境: - 安卓11
- 天然 reactjs 0.68.5
- React Native文件系统2.20.0
需要:
保存持久到应用程序的文件(如果我卸载应用程序,文件需要持久)。如果我重新安装应用程序,我需要能够再次操作这些文件。我用RNFS.DownloadDirectoryPath
将文件上载到下载文件夹中,以便在卸载应用程序时不删除它们,但文件是公共的,如果需要,可以下载到另一个位置。
错误:
一切工作完美,直到我卸载并重新安装应用程序。只要我想操纵我的/storage/emulated/0/Download/AppName/...
中的现有文件
我想移动文件时遇到以下错误:
Error: ENOENT: open failed: EACCES (Permission denied), open '/storage/emulated/0/Download/AppName/...
我想下载文件时遇到以下错误:
Error: ENOENT: no such file or directory, open '/storage/emulated/0/Download
在操作文件之前,我确保具有:
- 权限Android.权限.写入外部存储
- 权限Android.权限.读取外部存储
我的版本。等级:
buildToolsVersion = "31.0.0"
minSdkVersion = 30
compileSdkVersion = 31
targetSdkVersion = 31
我的清单:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
....
android:requestLegacyExternalStorage="true"
android:preserveLegacyExternalStorage="true"
...
非常感谢那些愿意花时间帮助我的人
为了解决这个问题,我在清单中添加了这一行:
android:preserveLegacyExternalStorage="true"
我把build.gradle
中的minSdkVersion
从21改为30。
我的印象是,权利属于应用程序,就好像通过重新安装应用程序它失去了它的权利。
2条答案
按热度按时间rta7y2nd1#
对于android,您必须获得用户的许可,才能在与存储通信时在React Native代码中写入此内容
在按下按钮或代码中的任何其他地方调用上述函数
xfyts7mz2#
你没有告诉它,但这种情况发生在你的Android 11+设备。
在Android 11+上,应用只能访问自己创建的文件以及公共目录中的媒体文件。
重新安装后,应用程序将被视为不同的应用程序。
使用存储访问框架ACTION_OPEN_DOCUMENT让用户选择文件。