gpt4 book ai didi

android - 使用 React Native FS 将文件写入 Android 外部存储

转载 作者:行者123 更新时间:2023-12-04 12:05:27 47 4
gpt4 key购买 nike

我的 React Native Android 应用程序需要在位于外部存储的特殊文件夹中保存一个 JSON 文件。我正在尝试使用 RNFS ( https://github.com/itinance/react-native-fs ) 这样做:

const saveData = async () => {
var path = `${RNFS.ExternalStorageDirectoryPath}/MyApp`;
RNFS.mkdir(path);
path += '/data.json';
RNFS.writeFile(path, JSON.stringify(getData()), 'utf8')
.then((success) => {
console.log('Success');
})
.catch((err) => {
console.log(err.message);
});
}
它运行良好,但在 Android Q 设备上失败。显示此错误: Error: Directory could not be created如果我尝试在不创建目录的情况下编写普通文件,则会引发此错误: ENOENT: open failed: ENOENT (No such file or directory), open '/storage/emulated/0/data.json'但是,我已将此权限添加到我的 AndroidManifest.xml :
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
并在设置中授予外部存储权限。但是,如果我更改 RNFS.ExternalStorageDirectoryPathRNFS.DocumentDirectoryPath它没有任何错误。但我需要访问外部存储。有什么办法吗?

最佳答案

我发现 Android API 29+ 需要传统的外部存储访问。所以,我编辑了我的 AndroidManifest.xml (位于 android/app/src/main/ )像这样:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.appName">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

<application
...
android:requestLegacyExternalStorage="true"
...
>
</application>
</manifest>
一切都开始起作用了。此外,我还添加了授予 saveData 权限的请求。功能:
const saveData = async () => {
try {
const granted = await PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
]);
} catch (err) {
console.warn(err);
}
const readGranted = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE);
const writeGranted = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE);
if(!readGranted || !writeGranted) {
console.log('Read and write permissions have not been granted');
return;
}
var path = `${RNFS.ExternalStorageDirectoryPath}/MyApp`;
RNFS.mkdir(path);
path += '/data.json';
RNFS.writeFile(path, JSON.stringify(getData()), 'utf8')
.then((success) => {
console.log('Success');
})
.catch((err) => {
console.log(err.message);
});
}

关于android - 使用 React Native FS 将文件写入 Android 外部存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63392170/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com