diff --git a/android/Gnss.cpp b/android/Gnss.cpp index 1412883a..1d5a04e9 100644 --- a/android/Gnss.cpp +++ b/android/Gnss.cpp @@ -121,6 +121,7 @@ Return Gnss::setCallback(const sp& callback) { if (api != nullptr) { api->gnssUpdateCallbacks(mGnssCbIface, mGnssNiCbIface); api->locAPIEnable(LOCATION_TECHNOLOGY_TYPE_GNSS); + api->requestCapabilities(); } return true; } diff --git a/android/location_api/GnssAPIClient.cpp b/android/location_api/GnssAPIClient.cpp index b4f04065..4cb3f7df 100644 --- a/android/location_api/GnssAPIClient.cpp +++ b/android/location_api/GnssAPIClient.cpp @@ -49,7 +49,8 @@ GnssAPIClient::GnssAPIClient(const sp& gpsCb, LocationAPIClientBase(), mGnssCbIface(nullptr), mGnssNiCbIface(nullptr), - mLocationCapabilitiesMask(0) + mLocationCapabilitiesMask(0), + mLocationCapabilitiesCached(false) { LOC_LOGD("%s]: (%p %p)", __FUNCTION__, &gpsCb, &niCb); @@ -218,11 +219,20 @@ void GnssAPIClient::gnssConfigurationUpdate(const GnssConfig& gnssConfig) locAPIGnssUpdateConfig(gnssConfig); } +void GnssAPIClient::requestCapabilities() { + // only send capablities if it's already cached, otherwise the first time LocationAPI + // is initialized, capabilities will be sent by LocationAPI + if (mLocationCapabilitiesCached) { + onCapabilitiesCb(mLocationCapabilitiesMask); + } +} + // callbacks void GnssAPIClient::onCapabilitiesCb(LocationCapabilitiesMask capabilitiesMask) { LOC_LOGD("%s]: (%02x)", __FUNCTION__, capabilitiesMask); mLocationCapabilitiesMask = capabilitiesMask; + mLocationCapabilitiesCached = true; if (mGnssCbIface != nullptr) { uint32_t data = 0; if ((capabilitiesMask & LOCATION_CAPABILITIES_TIME_BASED_TRACKING_BIT) || diff --git a/android/location_api/GnssAPIClient.h b/android/location_api/GnssAPIClient.h index 1809c09d..d447157a 100644 --- a/android/location_api/GnssAPIClient.h +++ b/android/location_api/GnssAPIClient.h @@ -74,6 +74,7 @@ public: inline LocationCapabilitiesMask gnssGetCapabilities() const { return mLocationCapabilitiesMask; } + void requestCapabilities(); // callbacks we are interested in void onCapabilitiesCb(LocationCapabilitiesMask capabilitiesMask) final; @@ -90,6 +91,7 @@ private: sp mGnssNiCbIface; LocationCapabilitiesMask mLocationCapabilitiesMask; + bool mLocationCapabilitiesCached; LocationOptions mLocationOptions; };