Location.watchPositionAsync未将状态设置为位置

时间:2020-08-01 23:15:33

标签: javascript react-native geolocation expo

我正在使用expo-location来监视用户的位置更新

尤其是Location.watchPositionAsync(options, callback)函数。

它输出正确的位置,但没有使用setLocation

将该输出设置为状态

location返回以下内容:

Object {
  "remove": [Function remove],
}

setLocationlocation被存储在上下文提供程序中

我的代码如下:

App.js

    useEffect(() => {
        console.log('hi')
        _getLocationAsync = async () => {
            let { status } = await Permissions.askAsync(Permissions.LOCATION)
            if (status !== 'granted') {
                console.log('debieeed')
            }
            let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Balanced, timeInterval: 10000, distanceInterval: 1 }, (loc) => setLocation(loc.coords));
            console.log(locations)
           
        }
        _getLocationAsync()
    }, [])

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题, //Method to find the correctIndex static int findIndex(String s) { char ch; //Access all the characters of the String and the find the digit for (int i = 0;i < s.length();i++) { ch = s.charAt(i); if (Character.isDigit(ch)) { return ch-49; //Convert the character to index } } return -1; } 找不到任何位置

似乎有一个错误(或者通过这种方式,idk)。 您必须将准确性设置为高才能获取定位对象。它不适用于其他精度选项(因为它也不适用于默认设置)。

watchPositionAsync()

希望这对某人有帮助,我为此花了一个小时:)

答案 1 :(得分:0)

我仅通过对返回的位置进行深拷贝来解决问题

如果我的逻辑错误,请纠正我

我改变了

let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Balanced, timeInterval: 10000, distanceInterval: 1 }, (loc) => setLocation(loc.coords));
           

对此

let locations = await Location.watchPositionAsync({ accuracy: Location.Accuracy.Lowest,  distanceInterval: 2000 }, loc => setLocation(JSON.parse(JSON.stringify(loc.coords))));

JSON.parse(JSON.stringify(loc.coords))在复制位置数据的地方

答案 2 :(得分:-1)

您需要阅读世博会现场的文档。

<块引用>

返回解析为订阅对象的承诺,该对象有一个字段: remove (function) -- 不带参数调用此函数以删除此订阅。将不再为位置更新调用回调。

watchPositionAsync 的第二个参数请求一个回调函数,它接收一个 LocationObject

<块引用>

callback (function) -- 这个函数在每次位置更新时被调用。它接收一个 LocationObject 类型的对象作为第一个参数。

传递给回调的 LocationObject 是您要设置的状态。