React Native集成expo-location报错:requestForegroundPermissionsAsync未定义
问题描述
我在React Native中使用expo-location开发,代码如下:
import * as Location from "expo-location"; import * as TaskManager from 'expo-task-manager'; React.useEffect(() => { const config = async () => { let resf = await Location.requestForegroundPermissionsAsync(); let resb = await Location.requestBackgroundPermissionsAsync(); if (resf.status != 'granted' && resb.status !== 'granted') { console.log('Permission to access location was denied'); } else { console.log('Permission to access location granted'); } }; config(); }, []);
运行时触发如下错误:
WARN Possible Unhandled Promise Rejection (id: 0): TypeError: Cannot read property 'requestForegroundPermissionsAsync' of undefined TypeError: Cannot read property 'requestForegroundPermissionsAsync' of undefined at ?anon_0_ (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.fammap&modulesOnly=false&runModule=true:119292:75) at next (native) at asyncGeneratorStep (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.fammap&modulesOnly=false&runModule=true:20670:26) at _next (http://localhost:8081/index.bundle?platform=android&dev=true&minify=false&app=com.fammap&modulesOnly=false&runModule=true:20689:29) at anonymous
我已在Android配置文件中添加所有相关权限,请问哪里操作有误?
解决方案
- 确认
expo-location是通过expo install expo-location命令安装的,不要用npm/yarn直接安装——直接安装容易出现版本不兼容问题,导致模块加载异常。如果之前用了npm/yarn安装,先卸载再用expo命令重装。 - 检查项目是否为Expo managed workflow:expo-location仅支持Expo管理的项目,若为bare React Native项目,需更换为react-native-geolocation-service这类原生定位库,expo-location无法直接在bare项目中使用(除非配置expo modules,但步骤复杂)。
- 核对Expo SDK版本兼容性:
requestForegroundPermissionsAsync和requestBackgroundPermissionsAsync是expo-location较新版本提供的API,旧版Expo SDK可能没有这些方法。可查看expo-location的版本对应要求,升级到兼容的SDK版本。 - 重启开发服务器并清除缓存:运行
expo start --clear,有时安装依赖后未重启服务,会导致模块未被正确加载。 - 检查导入语句:确保
expo-location拼写正确,导入语法无错误。
内容的提问来源于stack exchange,提问作者josh
相关产品推荐
相关产品推荐

