【问题标题】:React Native Expo Location Permission throwing Location Provider warningReact Native Expo Location Permission 抛出 Location Provider 警告
【发布时间】: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 40expo-location 包版本是 ~10.0.0 并使用 Expo 在 Android 10 手机上进行测试Go 客户端应用程序。
我将不胜感激有关如何解决此问题的任何见解或建议。
请随时要求任何澄清。

【问题讨论】:

    标签: android react-native permissions location expo


    【解决方案1】:

    这个问题与我在过去一年中研究过的问题类似。在我的代码中,我最终也添加了 enableHighAccuracy,我认为这很有帮助。但它是 Unhandled Promise Rejection 的事实表明,如果它因任何原因而中断,您至少应该添加一个 try/catch 以优雅地处理它。

    gpsLocationFromDevice = await Location.getCurrentPositionAsync({ enableHighAccuracy: true });
    

    【讨论】:

    • 这是我的一篇旧帖子,有人可能会偶然发现寻找位置提供商信息。我注意到最近论坛线程正在唤醒,因为位置 getLocation 方法的系统性问题不再可靠地报告,因为编码器没有错误(也打我)。最简单的解决方法是循环询问 getLocation 直到找到位置。将尝试找到该链接并在此处添加以供后代使用,但如果我不记得将其放在这里,我只是想鼓励其他登陆这里的人在突然看到不稳定的 getLocation asyc 调用时找出该特定错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2019-06-17
    • 2022-07-12
    • 2016-04-09
    • 2016-06-19
    • 1970-01-01
    • 2013-05-31
    相关资源
    最近更新 更多