我正在制作一个画廊风格的应用程序,我需要添加删除图像的功能。
我正在使用 RNFS 库,特别是取消链接函数。完成后,该函数不会抛出任何错误,但不会从我的手机中删除该文件。
为了隔离问题,我使用 AwesomeProject 模板创建一个新应用程序并添加以下代码行:
import RNFS from 'react-native-fs';
import {PermissionsAndroid} from 'react-native';
在 App.tsx 中。
const usEffectFunction = async () => {
const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;
const hasPermission = await PermissionsAndroid.check(permission);
if (!hasPermission) {
await PermissionsAndroid.request(permission);
}
RNFS.unlink('/storage/emulated/0/Download/1.pdf')
.then(() => {
console.log('file deleted');
})
.catch((e: any) => console.log(e));
};
useEffect(() => {
usEffectFunction();
}, []);
在 App 组件内的 App.tsx 中。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
在AndroidManifest.xml中。
所有这些代码所做的就是请求写入存储的权限,然后删除我的文件系统中的文件。
如果路径不存在,我会收到“[错误:文件不存在]”消息,
如果路径正确,我会收到“文件已删除”并且没有错误,但该文件没有从我的设备中删除,我仍然可以使用 Android 文件管理器找到它。
经过一番研究,这是我了解到的信息。
react-native-fs
库在删除媒体时不支持Android 10(API级别29)中引入的新范围存储。
使用新的存储系统,您需要要求 Android 操作系统显示一个 Activity,请求用户允许使用
MediaStore.createDeleteRequest
删除媒体文件。
在我的研究中,我找不到任何使用
MediaStore.createDeleteRequest
实现媒体删除的 React-Native 模块。
我能够通过创建自己的 NativeModule 来使用本机函数删除照片来解决我的问题
MediaStore.createDeleteRequest
。