【发布时间】:2021-03-10 10:57:11
【问题描述】:
我正在尝试使用 expo 创建一个反应原生应用程序。
我的应用需要用户权限才能获取当前位置。
我有一个功能组件,它具有 useEffect() 钩子以异步获取权限。
代码如下。
const [location, setLocation] = useState(null);
useEffect(() => {
(async () => {
let permissionStatus = null;
if (Platform.OS === 'ios') {
let {status} = await Permissions.askAsync(Permissions.LOCATION);
permissionStatus = status;
} else {
let {status} = await ExpoLocation.requestPermissionsAsync();
permissionStatus = status;
}
if (permissionStatus !== 'granted') {
return;
}
let location = await ExpoLocation.getCurrentPositionAsync({});
setLocation(location);
console.log(location);
})();
}, []);
它有时可以正常工作,但有时会抛出此警告:
未处理的承诺拒绝:错误:位置提供程序不可用。确保已启用位置服务。
该应用程序显示权限请求对话框,并在同意后打开手机中的定位服务,但仍会引发此警告/错误。
在对这个网站和其他一些网站进行彻底研究之后,我将ACCESS_COARSE_LOCATION 添加到我的app.json.android.permissions 配置中并尝试了其他一些值,但最后我仍然经常遇到这个问题。
值得一提的是,由于配置的所有排列,代码都能完美运行,有时会针对相同的配置抛出此错误/警告。
我正在使用 Expo SDK 40 和 expo-location 包版本是 ~10.0.0 并使用 Expo 在 Android 10 手机上进行测试Go 客户端应用程序。
我将不胜感激有关如何解决此问题的任何见解或建议。
请随时要求任何澄清。
【问题讨论】:
标签: android react-native permissions location expo