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

如何在React Native CLI应用中申请ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION权限

在React Native CLI中配置ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION权限

这个权限对应Android 11(API 30)及以上的全文件访问权限,需分清单配置和代码申请两步完成:


一、配置AndroidManifest.xml

仅需修改Android平台的清单文件,路径为 android/app/src/main/AndroidManifest.xml:

  1. 在<manifest>根标签内(<application>标签外部)添加权限声明:
<!-- 核心权限:对应ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

<!-- 可选:兼容Android 10及以下版本的文件读写 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  1. 若需要兼容Android 10的旧存储模型,在<application>标签中添加属性:
<application
  ...
  android:requestLegacyExternalStorage="true">

二、代码中申请权限

该权限无法通过普通权限弹窗申请,必须引导用户跳转到系统设置页手动开启:

方法1:用React Native内置Linking跳转设置

import { Linking, Platform } from 'react-native';

const requestAllFilesPermission = async () => {
  if (Platform.OS !== 'android') return;
  
  try {
    // 直接打开应用专属设置页,用户需找到"允许访问所有文件"开关
    await Linking.openSettings();
  } catch (error) {
    console.error('跳转权限设置失败:', error);
  }
};

方法2:原生模块检测权限状态(可选)

若需要先判断是否已拥有权限,可自定义Android原生模块:

  1. 创建FilePermissionModule.java(路径:android/app/src/main/java/com/[你的包名]/):
package com.yourpackagename;

import android.os.Build;
import android.os.Environment;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

public class FilePermissionModule extends ReactContextBaseJavaModule {
    public FilePermissionModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return "FilePermissionModule";
    }

    @ReactMethod
    public boolean hasAllFilesPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            return Environment.isExternalStorageManager();
        }
        // Android 10及以下可根据读写权限判断
        return true;
    }
}
  1. 创建FilePermissionPackage.java注册模块:
package com.yourpackagename;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class FilePermissionPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new FilePermissionModule(reactContext));
        return modules;
    }

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }
}
  1. 在MainApplication.java中添加该包:
@Override
protected List<ReactPackage> getPackages() {
    List<ReactPackage> packages = new PackageList(this).getPackages();
    packages.add(new FilePermissionPackage());
    return packages;
}
  1. React Native代码中调用检测:
import { NativeModules } from 'react-native';

const { FilePermissionModule } = NativeModules;

const checkAndRequestPermission = async () => {
  const hasPermission = FilePermissionModule.hasAllFilesPermission();
  if (!hasPermission) {
    await requestAllFilesPermission();
  }
};

关键注意事项

  • 该权限仅对Android 11+生效,低版本需用传统读写权限
  • Google Play对使用MANAGE_EXTERNAL_STORAGE权限的应用审核严格,仅文件管理器、备份工具等特定场景允许上线,普通应用谨慎使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:05:19