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
相关产品推荐
相关产品推荐

