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
}, [])

代码成功调用了 initrequestLocationUpdatesWithCallbackEx,但来自 addFusedLocationEventListener 的控制台日志从未调用

已经开启hms core app位置权限,hasPermission也返回true

尝试了 problem with react native @hmscore/react-native-hms-location 条评论中的 locationRequest 选项,仍然无效

我们如何解决这些问题?

我认为这可能是使用问题。 addingFusedLocationEventListener的作用是添加FusedLocationEventListener。只有当 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 });
};