我使用expo-location来监视我的用户位置,因为它更新
特别是Location.watchPositionAsync(options, callback)
函数。
它输出了正确的位置,但没有使用setLocation
将该输出设置为状态location
返回以下内容:
Object {
"remove": [Function remove],
}
setLocation
和location
存储在上下文提供程序中
代码如下:
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()
}, [])
5条答案
按热度按时间7vux5j2d1#
我遇到了同样的问题,没有得到任何位置与
watchPositionAsync()
似乎有一个bug(或者它是这样设计的,idk)。获取定位对象必须将精度设置为高。它不适用于其他精度选项(因为它也不适用于默认值)。
希望这对某人有帮助,我在这上面损失了一个小时:)
z2acfund2#
我通过简单地对返回的位置进行深拷贝来解决我的问题
如果我的逻辑错了请纠正我
我换了这个
到这个
其中,
JSON.parse(JSON.stringify(loc.coords))
正在制作位置数据的深层拷贝jaxagkaj3#
vxf3dgd44#
62lalag45#
这个问题已经很老了,但对于仍然感兴趣的人来说:
watchPositionAsync
函数不直接返回位置;而是返回LocationSubscription对象。此对象有一个remove
方法,允许您停止接收更新。在大多数情况下,您将在useEffect
钩子的清理阶段使用此方法。要接收位置,需要在
options
参数之后提供一个callback
函数作为参数。请记住,更新的频率取决于传递给options
参数的值。在开发过程中,使用高精度、低时间间隔和小距离间隔对于测试callback
函数非常有用。但是,请确保适当调整这些参数以进行生产。下面是一个示例实现: