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

React Native 0.71.8中PermissionsAndroid请求致APP崩溃问题

问题分析与解决方案

核心结论

这并非PermissionsAndroid的普遍已知Bug,问题出在代码逻辑错误以及缺少异常处理环节。

问题排查与修复步骤

  • 权限状态常量误用:你在判断权限状态时错误使用了PermissionsAndroid.PERMISSIONS.GRANTED,正确的状态常量应该是PermissionsAndroid.RESULTS.GRANTED。PERMISSIONS是用于定义权限名称的枚举,而RESULTS才是权限请求返回的状态值(GRANTED/DENIED等),类型不匹配会触发崩溃。
  • 缺少Promise异常捕获:权限检查和请求的Promise没有添加catch块,若过程中出现异常会直接导致APP崩溃,必须补充异常处理逻辑。
  • 确认AndroidManifest配置:确保已经在android/app/src/main/AndroidManifest.xml中添加短信权限声明:
    <uses-permission android:name="android.permission.SEND_SMS" />
    

修正后的代码

import { PermissionsAndroid } from 'react-native';

const checkPermission = () => {
  PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.SEND_SMS)
    .then(status => {
      if (status === PermissionsAndroid.RESULTS.GRANTED) {
        setHasPermission(true);
      } else {
        requestPermission();
      }
    })
    .catch(err => console.error('权限检查出错:', err));
};

useEffect(() => {
  checkPermission();
}, []);

const requestPermission = () => {
  PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.SEND_SMS)
    .then(status => {
      if (status === PermissionsAndroid.RESULTS.GRANTED) {
        setHasPermission(true);
      } else {
        setHasPermission(false);
      }
    })
    .catch(err => console.error('权限请求出错:', err));
};

关于react-native-permissions的问题

由于该库底层依赖PermissionsAndroid,你之前的代码错误同样会导致它出现相同崩溃问题,修正上述代码逻辑后,使用该库也能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:42:40