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],
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()
, [])
【问题讨论】:
【参考方案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 未将状态设置为位置的主要内容,如果未能解决你的问题,请参考以下文章