React Native使用PermissionsAndroid申请Android定位权限返回null求助
定位权限报错修复方案
核心错误点修复
你代码中存在权限常量拼写错误,是触发permission is null的直接原因:
将 PermissionsAndroid.PERMISSIONS.ACCESS_FINA_LOCATION 修正为 PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,原拼写少写了字母E,导致系统无法识别对应权限枚举值。
其他配套修正项
1. 修正权限申请参数写法
PermissionsAndroid.request的第二个参数直接传权限说明对象即可,不需要加rationale =前缀,修正后的申请代码如下:
const granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION, { title: "App location Permission", message: "App needs access to your location so you can take awesome rides.", buttonNeutral: "Ask Me Later", buttonNegative: "Cancel", buttonPositive: "OK" } );
2. 检查AndroidManifest权限声明
打开android/app/src/main/AndroidManifest.xml文件,确认已添加定位权限声明:
<!-- 基础定位权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 若targetSdkVersion >=31且应用需要后台定位,新增以下权限 --> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
3. 可选:规范useEffect写法
你当前useEffect里的create=、inputs=属于冗余赋值,不影响功能但不符合语法规范,可调整为标准写法:
useEffect(() => { if(Platform.OS ==='android'){ androidPermission(); }else{ Geolocation.requestAuthorization(); } }, [])
生效验证
所有修改完成后,重新编译打包安装到模拟器,不要直接使用热更新重载,即可正常触发权限申请流程。
内容的提问来源于stack exchange,提问作者Xplosio
相关产品推荐
相关产品推荐

