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

使用react-native-permissions调用Permissions.check()时遇getPermissionStatus未定义错误

解决react-native-permissions中Permissions.check()报错"Cannot read property 'getPermissionStatus' of undefined"的问题

问题拆解

你遇到的这个情况挺有意思:Permissions.getTypes()能正常输出,但check()方法却抛错,说明基础的库链接和导入是没问题的——毕竟getTypes()只是返回前端定义的权限类型列表,不涉及原生交互;但check()需要调用原生端的权限查询能力,所以问题大概率出在平台权限配置缺失或者库版本与API用法不匹配上。

针对性解决方案

1. 先排查版本兼容性(最可能的原因)

如果你安装的是react-native-permissions v3及以上版本,旧版的Permissions.check('photo')写法已经被废弃了!新版本采用了更明确的权限常量,比如:

// 先导入正确的方法和权限常量
import { check, PERMISSIONS } from 'react-native-permissions';

componentWillMount() {
  // iOS端用相册权限常量
  check(PERMISSIONS.IOS.PHOTO_LIBRARY)
    .then(response => {
      console.log(response);
    });
    
  // Android端要对应使用安卓的权限常量,比如:
  // check(PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE)
}

旧版直接传字符串'photo'的写法在新版本里会导致原生方法找不到,自然就抛出getPermissionStatus未定义的错误了。

2. 补全目标平台的权限配置

就算API写法正确,如果原生端没声明对应权限,check()也无法正常工作:

  • iOS:打开项目的Info.plist,添加相册权限的描述(苹果强制要求):
    <key>NSPhotoLibraryUsageDescription</key>
    <string>需要访问你的相册以选择照片</string>
    
  • Android:打开AndroidManifest.xml,添加权限声明:
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!-- Android 13+ 还需要额外添加 -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    

3. 重新构建原生项目

有时候react-native link后配置不会立即生效,需要清理缓存再构建:

  • iOS:打开Xcode执行Product > Clean Build Folder,再重新运行react-native run-ios
  • Android:在项目根目录执行cd android && ./gradlew clean,回到根目录后运行react-native run-android

4. 确认导入方式正确

不同版本的库导入方式也有区别,别混用:

// v2及以下旧版本
import Permissions from 'react-native-permissions';

// v3+新版本
import { check, PERMISSIONS } from 'react-native-permissions';

总结

优先检查你安装的react-native-permissions版本,对应使用正确的API写法,再补全平台权限配置,最后重新构建项目,这个问题基本就能解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:25:32