Huawei Location Kit for React Native,addFusedLocationEventListener方法不触发回调
Huawei Location Kit for React Native, addFusedLocationEventListener method doesn't trigger callback
设置华为定位工具,用于在使用应用时超时获取设备位置,遵循https://developer.huawei.com/consumer/en/doc/HMS-Plugin-Guides-V1/config-agc-0000001050197382-V1
的设置
我们没有真正的华为设备,我们正在使用云调试
尝试使用所有这些语法实现超时观看 gps 位置
// ------ Parent ------
// this put on the parent useEffect
HMSLocation.LocationKit.Native.init()
.then(() => console.log('----------Success Initialize----------'))
.catch((err) => alert(err.message))
// ------ Child ------
const stopWatchingLocation = () => {
if (hasHms) {
HMSLocation.FusedLocation.Events.removeFusedLocationEventListener(
(res: LocationResult) => console.log('remove add listener', res),
)
}
}
const startWatchingLocation = async () => {
if (hasHms) {
HMSLocation.FusedLocation.Native.requestLocationUpdatesWithCallbackEx(
hwGeolocationOptions,
)
.then((res) => console.log('success request', res))
.catch((error) => console.log('failed request', error))
HMSLocation.FusedLocation.Events.addFusedLocationEventListener(
(res: LocationResult) => console.log('result', res.lastHWLocation)
)
}
}
// implementation of add & remove event listener
useEffect(() => {
startWatchingLocation() // inside here invoke addFusedLocationEventListener
return stopWatchingLocation // inside here invoke, cleanup function removeFusedLocationEventListener
}, [])
代码成功调用了 init
、requestLocationUpdatesWithCallbackEx
,但来自 addFusedLocationEventListener
的控制台日志从未调用
已经开启hms core app位置权限,hasPermission
也返回true
尝试了 problem with react native @hmscore/react-native-hms-location 条评论中的 locationRequest
选项,仍然无效
我们如何解决这些问题?
我认为这可能是使用问题。 addingFusedLocationEventListener
的作用是添加FusedLocationEvent
Listener。只有当 FusedLocationEvent 发生时才会触发此函数。
在你的描述中,删除addFusedLocationEventListener
后的removeFusedLocationEventListener
,添加的监听器也被删除。
另外,建议使用独立的函数,不要直接在入参中定义。
handleLocationUpdate = (locationResult) => { console.log(locationResult); this.setState({ locationCallbackResult: locationResult }); }
requestLocationCallbackWithListener = () => {
HMSLocation.FusedLocation.Native.requestLocationUpdatesWithCallbackEx(locationRequest)
.then((res) => this.setState({ reqCode: res.requestCode }))
.catch((err) => alert(err.message));
HMSLocation.FusedLocation.Events.addFusedLocationEventListener(this.handleLocationUpdate);
this.setState({ autoUpdateEnabled: true });
};
设置华为定位工具,用于在使用应用时超时获取设备位置,遵循https://developer.huawei.com/consumer/en/doc/HMS-Plugin-Guides-V1/config-agc-0000001050197382-V1
的设置我们没有真正的华为设备,我们正在使用云调试
尝试使用所有这些语法实现超时观看 gps 位置
// ------ Parent ------
// this put on the parent useEffect
HMSLocation.LocationKit.Native.init()
.then(() => console.log('----------Success Initialize----------'))
.catch((err) => alert(err.message))
// ------ Child ------
const stopWatchingLocation = () => {
if (hasHms) {
HMSLocation.FusedLocation.Events.removeFusedLocationEventListener(
(res: LocationResult) => console.log('remove add listener', res),
)
}
}
const startWatchingLocation = async () => {
if (hasHms) {
HMSLocation.FusedLocation.Native.requestLocationUpdatesWithCallbackEx(
hwGeolocationOptions,
)
.then((res) => console.log('success request', res))
.catch((error) => console.log('failed request', error))
HMSLocation.FusedLocation.Events.addFusedLocationEventListener(
(res: LocationResult) => console.log('result', res.lastHWLocation)
)
}
}
// implementation of add & remove event listener
useEffect(() => {
startWatchingLocation() // inside here invoke addFusedLocationEventListener
return stopWatchingLocation // inside here invoke, cleanup function removeFusedLocationEventListener
}, [])
代码成功调用了 init
、requestLocationUpdatesWithCallbackEx
,但来自 addFusedLocationEventListener
的控制台日志从未调用
已经开启hms core app位置权限,hasPermission
也返回true
尝试了 problem with react native @hmscore/react-native-hms-location 条评论中的 locationRequest
选项,仍然无效
我们如何解决这些问题?
我认为这可能是使用问题。 addingFusedLocationEventListener
的作用是添加FusedLocationEvent
Listener。只有当 FusedLocationEvent 发生时才会触发此函数。
在你的描述中,删除addFusedLocationEventListener
后的removeFusedLocationEventListener
,添加的监听器也被删除。
另外,建议使用独立的函数,不要直接在入参中定义。
handleLocationUpdate = (locationResult) => { console.log(locationResult); this.setState({ locationCallbackResult: locationResult }); }
requestLocationCallbackWithListener = () => {
HMSLocation.FusedLocation.Native.requestLocationUpdatesWithCallbackEx(locationRequest)
.then((res) => this.setState({ reqCode: res.requestCode }))
.catch((err) => alert(err.message));
HMSLocation.FusedLocation.Events.addFusedLocationEventListener(this.handleLocationUpdate);
this.setState({ autoUpdateEnabled: true });
};