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

Posted

技术标签:

【中文标题】Location.watchPositionAsync 未将状态设置为位置【英文标题】:Location.watchPositionAsync not setting state as location 【发布时间】:2020-08-01 23:15:33 【问题描述】:

我正在使用 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()
    , [])

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,没有使用watchPositionAsync() 获取任何位置

似乎有一个错误(或者它是这样设计的,idk)。 您必须将准确度设置为高才能获取位置对象。它不适用于其他精度选项(因为它也不适用于默认值)。

let location = await Location.watchPositionAsync(
  accuracy:Location.Accuracy.High,
  (loc) => console.log(loc)
);

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

【讨论】:

【参考方案2】:

我通过简单地复制返回的位置来解决我的问题

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

我改变了这个

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)) 正在对位置数据进行深层复制

【讨论】:

您是否必须为最新的 expo SDK 更新此内容?如果有,怎么做?

以上是关于Location.watchPositionAsync 未将状态设置为位置的主要内容,如果未能解决你的问题,请参考以下文章