React Native Android:删除文件

问题描述 投票:0回答:1

我正在制作一个画廊风格的应用程序,我需要添加删除图像的功能。

我正在使用 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 文件管理器找到它。

android react-native unlink react-native-fs
1个回答
1
投票

经过一番研究,这是我了解到的信息。

  • react-native-fs
    库在删除媒体时不支持Android 10(API级别29)中引入的新范围存储。

  • 使用新的存储系统,您需要要求 Android 操作系统显示一个 Activity,请求用户允许使用

    MediaStore.createDeleteRequest
    删除媒体文件。

  • 在我的研究中,我找不到任何使用

    MediaStore.createDeleteRequest
    实现媒体删除的 React-Native 模块。

我能够通过创建自己的 NativeModule 来使用本机函数删除照片来解决我的问题

MediaStore.createDeleteRequest

© www.soinside.com 2019 - 2024. All rights reserved.