定位模块之getAddressesFromLocation函数解析 原创 精华
定位模块之getAddressesFromLocation函数解析
目录
GetAddressesFromLocation 通过当前相对坐标获取地址名称。由于不清楚当前版本配置,目前暂时未能通过经纬度获坐标获取到地址名称,以下内容为数据流程分析。参考社区提供相关信息通过应用使用经纬度获取相地址名称,其中应用配置参考on函数分析。
location_napi_entry.cpp init函数中已经配置好js与C++转换函数,当然也可以参考@ohos.geolocation.d.ts文件的函数。即定位模组需要使用的函数。
GetAddressesFromLocation 函数实现体如下,JsObjToReverseGeoCodeRequest函数将对应的经纬度写入到asyncContext->reverseGeoCodeRequest。
其中使用lamba语言对发送(asyncContext->executeFunc)和 结果asyncContext->completeFunc进行组合。
执行体:
g_locatorPtr->IsLocationEnabled() 用于检验是否具有定位功能,需要打开定位功能即设置->隐私->定位服务
g_locatorPtr->GetAddressByCoordinate 获取地址函数
参考日志信息。
g_locatorPtr->GetAddressByCoordinate 只向函数LocatorProxy::GetAddressByCoordinate
通过 error = remote->SendRequest(GET_FROM_COORDINATE, data, reply, option); 将消息发送出去。LocatorAbilityStub::OnRemoteRequest将处理接受到来的消息。
在函数OnRemoteRequest 中
ret = ProcessMsgRequirLocationPermission(code, data, reply, option);将会通过GET_FROM_COORDINATE 标识,通过GetAddressByCoordinate 获取地址,其中GetAddressByCoordinate 指向函数int LocatorAbility::GetAddressByCoordinate(MessageParcel &data, MessageParcel &replay)
remoteObject->SendRequest(type, data, replay, option); 将通过GeoConvertServiceStub 中的OnRemoteRequest再次发送。
ret = GetAddressByCoordinate(data, reply);函数将在 GeoConvertService::GetAddressByCoordinate函数获得结果。当前函数应该结果不符合预期,猜测当前函数正在开发中。
至此lamba中函数执行函数流程到此结束。接下来便是asyncContext->completeFunc
GeoAddressesToJsObj 函数将获取的结果保存到context->result[PARAM1] 中,当然当前版实际结果并没有具体实现,参考LocatorImpl::GetAddressByCoordinate中的replyList.push_back(GeoAddress::Unmarshalling(reply)); 数据存储。
DoCallBackAsyncWork 中数据实际获取结果处理
上述代码可以看出,即执行成功之后,JS页面获取结果为undefine即napi_get_undefined(env, &context->result[PARAM0]);
界面获取执行结果:
少见的定位功能讲解!感谢分享。
这方面这的很少,感谢老师分享
你好,请问是用什么设备测试的呢