Version 3.30.1 – June 06, 2025 #
Changed
- Updated internal dependencies:
- com.google.protobuf:protobuf-javalite:3.25.7
- com.squareup.okhttp3:okhttp:4.10.0
Version 3.30.0 – May 16, 2025 #
Added
- Added SitumSdk.communicationManager().fetchClosestPOIs() to be able to retrieve the closest POIs from a location:
SitumSdk.communicationManager().fetchClosestPOIs(
currentLocation, // The reference location
poiCategoryIdentifier, // Filter by category or not (using null)
NUMBER_OF_RETURNED_POIS, // Limit the results returned
DistanceAlgorithm.HAVERSINE,
object: Handler<Collection<PoiWithDistance>> {
override fun onSuccess(closestPOIs: Collection<PoiWithDistance>) {
Log.d("TEST", "${closestPOIs.size} POIs ordered by distance")
closestPOIs.forEach {
Log.d("TEST", "${it.poi.name} (${it.poi.identifier}) - ${it.distance} m")
}
}
override fun onFailure(error: Error?) {
Log.e("TEST", "Some error occurred while fetching POIs: $error")
}
}
)
Changed
- Implemented Parcelable interface and equality overrides at es.situm.sdk.wayfinding.model objects.
- Also implemented MapperInterface for the same objects except for NavigationFilter.
Version 3.29.1 – May 14, 2025 #
Changed
- Implemented internal improvements:
- Faster convergence: Reduced computation times to reach a stable and accurate position more quickly.
- Scalability boost: Optimized positioning system performance in large and complex buildings.
- GPS integration: Improved precision of GPS coordinates when used by the positioning engine.
Fixed
- Fixed an issue in CommunicationManager.fetchPoiCategories() that caused the PoiCategories to be returned with empty CustomFields.
Version 3.29.0 – May 09, 2025 #
Added
- Added a new method MapViewController#navigateToPoint(NavigationPoint) that starts navigation to a destination within a Building defined in terms of latitude, longitude, and floor identifier. It may optionally include a name that will appear as the name of the destination in the Map Viewer user interface (e.g., “Reception”).
This method also accepts an AccessibilityMode to be used during navigation. - Added NavigationPoint to encapsulate the required and optional parameters for the aforementioned method MapViewController#navigateToPoint(NavigationPoint).
val point = NavigationPoint.Builder(LATITUDE, LONGITUDE, YOUR_FLOOR_IDENTIFIER)
.setNavigationName("Reception")
.build()
mapViewController.navigateToPoint(point)
Changed
- Improved location accuracy when using GPS in large buildings.
Version 3.28.0 – May 08, 2025 #
Added
- Added a new method MapViewController#search(SearchFilter) that performs a search in the MapView using the specified SearchFilter. This has the same effect as if the user had manually entered a query into the MapView’s search bar. The search results will be displayed in the MapView, and any relevant UI updates (such as highlighting POIs or displaying a result list) will be triggered accordingly.
- Added a new class SearchFilter to encapsulate the search parameters for the aforementioned method MapViewController#search(SearchFilter). You can filter by free-text and/or by POI category.
- Setting a property to null will have no effect and will not modify that filter criterion.
- Setting a property to an empty string will clear that criterion from the search.
mapViewController.search(
SearchFilter.Builder()
.setPoiCategoryIdentifier(YOUR_POI_CATEGORY_IDENTIFIER)
.setText("Free text")
.build()
)
Version 3.27.0 – April 30, 2025 #
Added
- Added new MapViewController.navigateTo() to be able to start a navigation to any destination by applying a filter. Currently you can use this method to navigate to the nearest POI in a PoiCategory like the following:
override fun onLoad(mapViewController: MapViewController) {
mapViewController?.navigateTo(
filter = NavigationFilter.initWithPoiCategoryIdentifier("123456"),
accessibilityMode = DirectionsRequest.AccessibilityMode.CHOOSE_SHORTEST, // Select between different accessibility modes.
)
}
You can fetch all the PoiCategories of your account with SitumSdk.communicationManager().fetchPoiCategories():
SitumSdk.communicationManager()
.fetchPoiCategories(object : Handler<Collection<PoiCategory>> {
override fun onSuccess(obtained: Collection<PoiCategory>?) {
// Store your fetched categories to use mapViewController.navigateTo()
}
override fun onFailure(error: Error?) {
// Some error occurred, notify the user
}
})
Version 3.26.5 – April 24, 2025 #
Changed
- Improved service startup compatibility (no impact for most users):
Previously, the Situm PositioningService was declared in the library manifest as foregroundServiceType=location, which caused Android to apply all foreground service restrictions — even when useForegroundService(bool) was set to false. This prevented the Situm service from being launched in the background by another foreground service without triggering Android restrictions or potential crashes.
To solve this, we’ve introduced a new FGPositioningService, explicitly designed to run in the foreground. Now, PositioningService can safely be started as a background service from other foreground services.
This change is internal and should be completely transparent for the vast majority of users.
Version 3.26.4 – April 08, 2025 #
Added
- New functionality to exclude tags in the routes based on time. You can learn more about it here.
Version 3.26.3 – March 26, 2025 #
Resolved an issue introduced in version 3.20.6.
Fixed
- The RECEIVE_BOOT_COMPLETED permission has been reinstated to ensure proper functionality of AltBeacon when a Foreground Service is not utilized.
Version 3.26.2 – March 21, 2025 #
This version contains a bug and should not be used.
Added
- Now the Mapview makes your phone vibrate when you enter a geofence and have geofence enter actions configured in your profile.
Version 3.26.1 – March 19, 2025 #
This version contains a bug and should not be used.
Fixed
- Fixed beacon reading information in Asset Tracking Options to provide more reliable positioning.
Version 3.26.0 – March 17, 2025 #
This version contains a bug and should not be used.
Added
- Introduced the debugMode parameter in MapViewConfiguration. This parameter is intended for development purposes and should not be enabled in production environments.
- Implemented a persistence layer for Asset Tracking Options (originally introduced in version 3.23.0). With this functionality, when the SDK attempts to upload scan readings while offline, the data will be stored locally. The persisted data will be uploaded in batches once the SDK successfully transmits the current scans.
- This release includes a database migration, so we recommend thoroughly testing both forward and backward compatibility during the transition.
Changed
- The viewerDomain parameter in MapViewConfiguration is now enforced to use the HTTPS protocol, except when debugMode is enabled.
Removed
- Eliminated the invocation of Environment.getExternalStorageState(…), as it is considered insecure in certain scenarios.
- Removed the RECEIVE_BOOT_COMPLETED permission, which was inherited from AltBeacon.
Version 3.25.0 – March 12, 2025 #
Added
- New class UserHelperColorScheme that allows you to configure the colors used in the UserHelperManager. You can use it like this:
SitumSdk.init(context)
// Situm will automatically request the required permissions and sensors to the user.
val colorScheme = UserHelperColorScheme.Builder().setPrimaryColor("#1b3278").setSecondaryColor("#ffffff").build()
SitumSdk.userHelperManager().setColorScheme(colorScheme)
SitumSdk.userHelperManager().autoManage(true)
Version 3.24.0 – March 11, 2025 #
Added
- New CoordinateConverter#toCartesianAngle() to convert some angle from Earth system coordinate to building system coordinate.
Changed
- Now ExternalLocations are populated with cartesianBearing when notified from onLocationChanged().
Version 3.23.0 – March 05, 2025 #
Added
- New AssetTrackingOptions for LocationRequest. This is a new feature that enables or disables asset tracking for BLE beacons. When enabled, the SDK continuously collects and maintains a record of BLE beacons detected in the venue. At regular intervals, the complete list of beacon readings is uploaded to Situm Cloud, where it is associated with the user’s current position. This association enables the extrapolation of the absolute positions of the scanned beacons, providing valuable insights for tracking and managing assets in the environment.
- New BAD_ASSET_TRACKING_OPTIONS status at LocationStatus indicating an error processing the given AssetTrackingOptions. Specifically, one or more UUIDs used for filtering are invalid.
Version 3.22.0 – February 11, 2025 [STABLE] #
Added
- MapViewConfiguration#setProfile() has been added, replacing the old MapViewConfiguration#
setRemoteIdentifier()(deprecated) with the same functionality. - Added new SitumSdk.userHelperManager(), that will automatically ask the user for the relevant permissions / sensors enabled when needed through the UI.
To enable this feature call autoManage(Boolean) right after initializing our SDK:
SitumSdk.init(context) // Situm will automatically request the required permissions and sensors to the user. SitumSdk.userHelperManager().autoManage(true)
Deprecated
- MapViewConfiguration#
setRemoteIdentifier() has been marked as deprecated and will be removed in a future version. It is recommended to use MapViewConfiguration#setProfile() instead. setLanguage(String),setLanguageFromSystem(Context), andgetLanguage()have been deprecated. These methods will be removed in a future version.
Removed
- The MapViewConfiguration#
setConfigurationIdentifier() method has been removed.
Version 3.21.3 – January 24, 2025 #
Changed
- Made the AttributeSet parameter in the MapView constructor nullable.
Version 3.21.2 – January 16, 2025 #
Added
- Added new internal method internalOnMessageSent that allows to receive MapViewer notifications in a native app using the SDK.
Version 3.21.1 – January 09, 2025 #
Added
- Support to Android 15 devices with 16 KB page size.
Version 3.21.0 – December 19, 2024 #
Added
- Added new methods to the LocationManager to be able to set multiple geofence events listeners. These methods are:
- Added a new critical error FOREGROUND_SERVICE_NOT_ALLOWED (code 8014) to handle the case where applications try to start the Situm Foreground Service from the background. On Android 12+ (API level 31 and above), apps are generally restricted from starting Foreground Services while running in the background, except in certain specific exemptions. If you try to start the Situm Foreground Service from the background, the SDK will capture the Operating System exception and will throw this error through the LocationListener#onError callback.
- New LocationRequest options: DiagnosticsOptions. By now, it only contains a flag
uploadDiagnosticsData to decide whether or not to upload diagnostics and telemetry data to your Dashboard. Enabling this option is beneficial for support purposes, as the telemetry data contains valuable insights that the Situm team can analyze to identify and resolve positioning issues more effectively. Like any other upload, it consumes network bandwidth, so in certain scenarios you may opt to disable it.
Fixed
- Updated invalidateCache() to also remove the cached remote configuration.
Deprecated
- LocationManager#setGeofenceListener() was deprecated. Use instead addGeofenceListener(), removeGeofenceListener() and removeAllGeofenceListeners().
Version 3.20.0 – October 30, 2024 [Stable] #
Changed
- Added new .accuracy() and .bearing() methods to ExternalLocation.Builder.
Version 3.19.0 – October 30, 2024 #
Added
- POI Selection: Added MapViewController#selectPoi(String) to programmatically select a POI by ID.
- Map Language Configuration: Introduced MapViewController#setLanguage(String) for changing the map’s language dynamically. You can also set a default language at initialization with the new language parameter in MapViewConfiguration.
- Event Callbacks:
- MapViewController#onPoiSelected(OnPoiSelectedCallback) and MapViewController#onPoiDeselected(OnPoiDeselectedCallback) to notify when a POI is selected or deselected.
- MapViewController#onExternalLinkClicked(OnExternalLinkClickedCallback), triggered when a user clicks an external link in the map. If unset, links will open in the default system browser.
- Stability Update: Added a consumer ProGuard rule to prevent crashes when minifyEnabled is enabled, addressing an issue related to the AltBeacon library.
Fixed
- Fixed a bug that caused invalid positions to be generated before a USER_NOT_IN_BUILDING status.
Version 3.18.0 – October 17, 2024 #
Added
- Added a new method NavigationListener#onProgress(NavigationProgress, Route) that receives the original Route calculated for the current navigation session. This is useful to simplify scenarios where you need a reference to the original route in each progress notification.
This new method has a default empty implementation that aims to mitigate compatibility breaks. Default methods are available from Java 8 onwards so compatibility breakage could occur.
Changed
- Deprecated the method NavigationListener#onProgress(NavigationProgress).
Version 3.17.1 – September 27, 2024 #
Added
- Improved floor changes when using BY_FOOT_VISUAL_ODOMETRY motion mode.
Fixed
- Fixed an issue that could cause delays in re-entering a building after receiving ‘out of building’ when positioning with GPS if no WiFi or BLE signals are received.
Version 3.17.0 – September 16, 2024 #
Added
- Added a new method navigateToPoi(String) to MapViewController. Also added a method overload navigateToPoi(String, AccessibilityMode) that lets you specify the desired AccessibilityMode.
Changed
- Added basic error and state management to allow MapView to notify the user whether positioning is starting, working correctly, or if there was an issue.
Version 3.16.2 – August 23, 2024 #
Changed
- Fixed some bug that returned always the default Indication#getOrientationType() of the indications when mapping these in NavigationProgress#fromMap()
Version 3.16.1 – August 07, 2024 #
Changed
- Performance was optimized for position calculation in buildings with multiple floor transition points.
Fixed
- Correctly detect when the user is not inside the building but is relatively close and is positioning only with GPS.
Version 3.16.0 – July 22, 2024 #
Added
- Added ExternalNavigation#toMap() and ExternalNavigation#fromMap() methods
Fixed
- Fix some exception thrown when using Poi#fromMap()
Version 3.15.0 – July 16, 2024 #
Added
- Introduced a new method tapAction(TapAction) to ForegroundServiceNotificationOptions.Builder. This method allows you to configure the behavior when tapping the Foreground Service Notification displayed when useForegroundService is set to true in your LocationRequest (or remote configuration). There are three predefined behaviors:
- LAUNCH_APP (default): Launches the app’s main activity using the information returned by PackageManager#getLaunchIntentForPackage(String).
- DO_NOTHING: No action is taken when the notification is tapped.
- LAUNCH_SETTINGS: Launches the operating system settings screen for the current app.
Changed
- Default Behavior: The Foreground Notification now launches the app by default when tapped (corresponding to the aforementioned LAUNCH_APP).
- Show Stop Action: The showStopAction option in ForegroundServiceNotificationOptions is now true by default. This causes the stop button to appear in the Foreground Service Notification, allowing users to stop positioning at any time. You can use your LocationListener callbacks to handle LocationStatus.STOPPED statuses in such a case.
Version 3.14.0 – June 28, 2024 #
Added
- Added a new method LocationManager#addExternalArData(ExternalArData). When combined with the motion mode BY_FOOT_VISUAL_ODOMETRY, the SDK will utilize visual odometry from the camera passed down when calling this method.The SDK does not access the camera internally, so to enable this motion mode, you must inject the readings using the new method.
This method is intended for internal use, don’t use it as it may change in future releases.
Changed
- Now the motion mode BY_FOOT_VISUAL_ODOMETRY is not deprecated.
Version 3.13.2 – June 04, 2024 [Stable] #
Changed
- Improved the information in the navigation callbacks of the new navigation mode added in version 3.13.0. There were some info from POI and PoiCategory that was incorrect in the previous version of the callbacks and now this has been fixed.
Version 3.13.1 – May 15, 2024 #
Fixed
- Fixed a crash that was thrown when refreshing the beacon scanning service while the app was running in the background and the targetSdkVersion of the app integrating the SDK was 34 or higher on Android 14 devices.
- Fixed a problem with requestNavigationUpdates(NavigationRequest, DirectionsRequest, Handler) that caused the navigation to not work when you called this method if the navigation had already been started.
Version 3.13.0 – May 03, 2024 #
ℹ️ NOTE: This version adds support for the new navigation callbacks introduced in the Map Viewer 1.99.0 version.
Make sure you update to this new 3.13.0 version, otherwise the NavigationListener callbacks (onStart(), onProgress(), onDestinationReached(), onCancellation() and onUserOutsideRoute()) won’t work at all.
In case you want to still use these callbacks in a previous version, contact us at support@situm.com.
Added
- New navigation type. When Map Viewer is present, you can use the navigation of the Map Viewer instead of the SDK navigation. This type of navigation improves routes, indications and performance.
Changed
- Improved positioning performance.
Version 3.12.0 – April 01, 2024 #
Added
- New method NavigationListener.onDestinationReached(Route).
- New way of setting the destination in the DirectionsRequest. You can set a POI as destination with DirectionsRequest.Builder().to(String poiIdentifier).
Deprecated
Version 3.11.2 – March 14, 2024 [Stable] #
Fixed
- Fixed a runtime crash when positioning with LocationRequest.Builder#useForegroundService() to true inside integrations that use targetSdkVersion >= 34 on Android 14.
Version 3.11.1 – February 21, 2024 #
Changed
- Improved the positioning performance in large buildings.
- Improved the orientation during positioning.
Version 3.11.0 – February 16, 2024 #
Added
- New class
MapViewDirectionsOptions - New method
MapViewController.setOptions(MapViewDirectionsOptions)used to define the options that the routes calculated by the MapView will use. You can see how to implement it here.
Changed
- Now it is possible to install a GeofenceListener and receive notifications even if the positioning has been already started.
- Improved the performance of GeofenceListener by removing irrelevant information in the API call that retrieves Geofences.
Fixed
- Fixed a problem with the navigation in the MapView that was added in the version 3.10.0
Version 3.10.2 – February 15, 2024 #
Fixed
- Fixed how projections are computed when trying to project a point onto a route segment that is defined as a point instead of as a line. This led to issues when computing the navigation progress under specific circumstances.
Version 3.10.1 – February 02, 2024 #
Changed
- Improved the performance of GeofenceListener by removing irrelevant information in the API call that retrieves Geofences.
Version 3.10.0 – January 30, 2024 #
Added
- Two new methods DirectionsRequest.Builder().includedTags(List<String>) and DirectionsRequest.Builder().excludedTags(List<String>). These methods allow you to include or exclude paths based on their tags. To know more about how this works check this.
Fixed
- Solved a crash that happened sometimes during positioning on Android 14.
Version 3.9.3 -January 12,2024 #
Fixed
- Previously, there was an error with the navigation that affected versions 3.9.1 onwards. We fixed it in this version.
Version 3.9.2 -December 20,2023 #
This version and 3.9.1 contains a bug in navigation so they shouldn’t be used
Changed
- We have implemented a one-second maximum frequency limit for navigation updates. This improves performance by preventing multiple updates per second, especially when dead reckoning is active.
- If you were using the closest location in route from the NavigationProgress, take into account that this location will be updated at a maximum of 1 per second as well. If you want to have faster orientation updates, you’ll have to mix this position with the orientation of the location received in the LocationListener.
Version 3.9.1 -December 19,2023 #
Added
- New indication action PASS_THROUGH.
Changed
- Improved the Route calculated with DirectionsManager.requestDirections.
Version 3.9.0 -December 12,2023 #
Added
- Error BLUETOOTH_DISABLED. This error is thrown at the start of positioning if the Bluetooth is disabled in the phone and the only sensor used in positioning is the Bluetooth.
Fixed
- LocationStatus.BLE_SENSOR_DISABLED_BY_USER is also notified at the start of positioning if the Bluetooth is disabled.
Version 3.8.0 -November 27,2023 #
Added
- Added a new method LocationRequest.Builder#foregroundServiceNotificationOptions(…) to customize the Notification shown in the foreground mode.
- Added a new “stop” button to the Foreground Service Notification, to stop positioning from the Notification UI. The button is disabled by default and can be enabled using the new method foregroundServiceNotificationOptions(…).
Version 3.7.0 -November 20,2023 [Stable] #
Added
- New methods in MapViewConfiguration setRemoteIdentifier(String) and setViewerDomain(String)
- setRemoteIdentifier: Allows you to specify the ID of the map settings. This ID is provided by Situm upon request.
- setViewerDomain: Allows you to specify the URL of the MapViewer (default: https://map-viewer.situm.com).
Deprecated
- Methods setConfigurationIdentifier and setBaseUrl in MapViewConfiguration. You should use the methods added in this version instead.
Version 3.6.0 -November 15,2023 #
Added
- New method CommunicationManager.fetchIndoorPOIFromBuilding(…) to fetch a single POI. Also added a new Error HTTP_NOT_FOUND to the CommunicationManager domain.
- New method Poi.getCategories() that returns the list of categories the POI belongs to.
- Also added two method to obtain category identifiers from a POI, Poi.getCategoryIdentifier and Poi.getCategoryIdentifiers.
Changed
- The position adjustment is now decoupled from the orientation adjustment. If the distance from the calculated pose to the route is less than RouteAdjustment.distanceThreshold, the position will always be projected onto the route. The orientation will only be forced to align with the route direction if the position is projected onto the route and the difference between the bearing and the route direction is less than RouteAdjustment.angleDifferenceThreshold.
- Improved flexibility in PoiCategory.equals() method, allowing for a more relaxed comparison where matching the default category name is sufficient, irrespective of variations in alternative languages.
Fixed
- Leaked file stream at `StreamFile`.
Version 3.5.3 -November 06,2023 #
Changed
- Reduced time to obtain the first position.
Version 3.5.2 -October 31,2023 #
Changed
- Improves positioning performance when starting to follow a route. With this, the Map Viewer is able to adjust the location & orientation to the route smoothly. The routeAdjustement feature was broken from release 3.3.0. You can learn how to configure how the position is adjusted to the route from here.
Fix
- Corrected some polish translations.
Version 3.5.1 -October 26,2023 #
Changed
- From iOS Version 3.2.3 and Android version 3.5.1 routes behave the same on both platforms.
Version 3.5.0 -October 25,2023 #
WARNING: this version contains breaking changes.
Added
- Introduced a new method Configuration.setLanguageFromSystem(Context context) to automatically set the cartography translation language based on the current system language (when configured in the dashboard).
Changed
- Performance enhancements:
- Reduced the time to obtain the first position.
- Reduced the load times in all the CommunicationManager method calls.
- Behavior change: adjusted the behavior of Configuration.setLanguage to default to an empty value. This change ensures that the SDK does not utilize any specific language preference by default. Before this change, the device language was used by default.
- Cache max age adjustment: changed the default maximum cache age from 5 seconds to 1 hour for improved data management.
Deprecated
- Deprecated the getUpdatedAt and getCreatedAt methods for all model classes. Do not use these methods as they may not return the expected values.
Version 3.4.0 – October 19, 2023 #
Changed
- Updated Altbeacon library to version 2.19.5
- Improved the beacon scanning when useForegroundService is not enabled.
- The behaviour added in version 2.86.0 was removed. Now the positioning won’t restart when the app goes to background and returns to foreground. It is no longer necessary with the improvements to the beacon scanning
Version 3.3.1 – October 16, 2023 [Stable] #
Added
- New polish translation.
Version 3.3.0 – October 11, 2023 #
Changed
- We are pleased to announce that we have drastically improved route calculation algorithm for significantly enhanced performance. No action required from integrators as all enhancements have been seamlessly implemented internally.
Version 3.2.0 – September 21, 2023 #
Added
- Added new method callbacks to the NavigationListener interface. These new methods have a default empty implementation that aims to mitigate compatibility breaks. Default methods are available from Java 8 onwards so compatibility breakage could occur.
- onStart(Route): new method callback called when the navigation actually starts after a call to requestNavigationUpdates(…).
- onCancellation(): new callback called when the navigation is cancelled due to a call to removeUpdates().
- Added new methods to NavigationManager:
- addNavigationListener(NavigationListener), removeNavigationListener(NavigationListener), removeAllNavigationListeners(): add and remove listeners to the current navigation.
- requestNavigationUpdates(NavigationRequest): this overload of requestNavigationUpdates(NavigationRequest, NavigationListener) allows you to start navigation without passing a navigation listener.
- requestNavigationUpdates(NavigationRequest, DirectionsRequest, Handler): this is an overload of requestNavigationUpdates(NavigationRequest, NavigationListener) that calculates the route for you and automatically starts navigation when the route is obtained. Also you will not need to call NavigationManager#updateWithLocation(Location) as the SDK will do it internally.
Changed
- Until now, the Android SDK continued to respond with true to calls to NavigationManager#isRunning() after reaching the destination. However, reaching the destination now implies that navigation stops correctly, and isRunning() will return false as expected.
Version 3.1.2 – September 05, 2023 #
Deprecated
- MotionMode BY_FOOT_VISUAL_ODOMETRY and VEHICLE_VISUAL_ODOMETRY are now deprecated and if selected they will be changed to BY_FOOT
Removed
- ARCore library from the dependencies
Version 3.1.1 -August 11,2023 #
Changed
- Use the route information to improve the calculation of the user’s position.
- The parameters useRouteAdjustment, distanceThreshold and angleDifferenceThreshold used to improve the route guidance experience can be modified from the Remote Configuration.
Version 3.1.0 – August 04, 2023 #
Added
- Early support for Android 14. Previously, the SDK crashed in this version. Please bear in mind that Android 14 is not stable yet, therefore new issues might appear in the future.
- Method LocationRequest.avoidDoze and status LocationStatus.ALARM_PERMISSIONS_NEEDED_TO_AVOID_DOZE have been introduced. This allows you to prevent Doze mode from activating in your device. Previously, this was done internally by the SDK when needed, but this is no longer possible / advisable in Android 14. Using this configuration (avoiding Doze mode) is not recommended in most cases (except some tracking special cases), so you shouldn’t use it in general. If you want to know more about Doze Mode you can check these Android docs.
Removed
- Permission SCHEDULE_EXACT_ALARMS is no longer declared by the SDK.
Version 3.0.1 – July 18, 2023 #
Changed
- Improved positioning when the user is following a route and decides to ignore it in order to go in another direction.
Added
- Added experimental parameters useRouteAdjustment, distanceThreshold and angleDifferenceThreshold that allow the user’s position and orientation to be adjusted to the route being followed.
Version 3.0.0 – July 7, 2023 #
Introducing the new Situm SDK 3.0.
We are thrilled to announce the release of Situm SDK 3.0, which implies a significant architectural change in our SDK. With this update, we have integrated the previous UI standalone solution Wayfinding library directly into the SDK. This integration aims to streamline the development process and provide a more cohesive and comprehensive solution.
Furthermore we have introduced a remarkable evolution and improvement upon the Wayfinding library with the addition of the MapView component, powered by the new Situm Map Viewer. We’ve been listening to our customers’ feedback, and we have incorporated a wide range of enhancements based on your valuable input. Checkout the Situm page for further details.
As this library includes significant changes, compatibility with previous versions has been broken. We understand that transitioning to a new library may require some adjustments. To facilitate a smooth migration process, we have prepared comprehensive documentation:
We are incredibly grateful for your continued support and trust in our library. Situm SDK 3.0 represents our commitment to empowering developers with the most advanced tools and ensuring a brighter future for your software development endeavors.
Thank you for being part of this exciting journey with us!
Added
- The new Situm SDK 3.0 introduces a new visual component, MapView to provide interactive maps within your application. The MapView allows you to show indoor maps of your buildings on your app! It is a fully interactive Android View with improved capabilities:
- Intuitive Guidance with Dynamic and Static Navigation.
- Advanced POI Display Based on Zoom Level and Density.
- “What’s Nearby” Exploration Made Easy with Category & Subcategory Filtering, and POI search.
- POI information visualization.
- Tailored User Experience with High Configurability.
- Out of the box support for raster floorplans, raster tiles and GeoJSON/IMDF floorplans.
- Multilingual Interface.
- This new version lays the foundation for future improvements, specifically enabling full 3D maps and even augmented reality capabilities.
- Introduced MapViewController, a class that acts as a controller for MapView and manages user interactions and map data.
Version 2.87.0 – June 9, 2023 #
Added
- Added a new static method fromMap(Map) to DirectionsRequest, NavigationRequest, Point, Coordinate, CartesianCoordinate and Angle. This method, along with toMap(), aims to simplify the integration of this SDK in hybrid platforms such as Flutter or React Native.
- Added the method NavigationRequest#setRoute(Route) so the Route can be attached to the navigation request after the instance is constructed with NavigationRequest.Builder.
Changed
- Updated DirectionsRequest and NavigationRequest to implement MapperInterface, so they can be converted into a java.lang.Map.
Fixed
- Fixed a crash produced when calibration starts and WiFi Throttling is activated in the developer settings of the device.
Version 2.86.3 – May 25, 2023 #
Changed
- We have updated the removeUpdates() method to immediately emit the LocationStatus.STOPPED state through the method LocationListener#onStatusChange(LocationStatus).
- The implementation of the toMap() method in the Route and RouteStep objects has been updated to correct a typo: the value of TO is now in lowercase for consistency with the rest of the fields. “TO” was maintained to avoid compatibility issues.
- Internal improvements and code optimizations.
Version 2.86.2 – May 15, 2023 – [Stable] #
Changed
- Fixed an error added in version 2.86.1. In some cases LocationStatus.USER_NOT_IN_BUILDING took to much time to be sent
Version 2.86.1 – May 10, 2023 #
Changed
- Improved positioning in outdoor geofences when following a route.
Fixed
- Fixed bug that caused USER_NOT_IN_BUILDING not to be returned when the GNSS position does not match the position of the building in which it is trying to be positioned.
- Fixed bug that could provoke to return the initial poses near coordinates 0,0 if that area in the building is passable.
Version 2.86.0 – May 08, 2023 #
Changed
- When useForegroundService is false and the app goes to background more than 30 seconds then when it returns to foreground the positioning will be automatically restarted.
- Internal improvements and code optimized.
Version 2.85.3 – April 24, 2023 #
Fixed
- Fixed Indication#toMap() returns enum type at orientationType instead of String.
Changed
- Improved GNSS based out of building detector.
Version 2.85.2 – April 3, 2023 #
Changed
- Changed ble scanning behaviour that could cause some bluetooth devices to disconnect momentarily.
- Changed Out of Building estimation to be coherent with the sensors used in the building detector.
Fixed
- Fixed bug in positions cache which could make the first positions to be incorrect.
Version 2.85.1 – March 20, 2023 #
Changed
- Improves positioning orientation when the compass does not work correctly.
Version 2.85.0 – March 2, 2023 – [Stable] #
Fixed
- Fixed the sequence of actions STARTING and CALCULATING notified in reverse order at LocationListener#onStatusChanged in Global Mode.
Changed
- Performed internal refactors that improve stability in cases where the SDK and the Wayfinding module coexist.
Version 2.84.0 – February 14, 2023 #
Added
- Added new methods addLocationListener(LocationListener), removeLocationListener(LocationListener) and removeAllLocationListeners() to LocationManager. With these methods you can subscribe and unsubscribe to the SitumSdk positioning and receive location updates, status codes and errors. This new API is especially useful in scenarios where the SDK and Wayfinding coexist.
- Added new method overloads requestLocationUpdates(LocationRequest) and removeUpdates(). These new methods allow you to start and stop positioning while keeping references to previously set LocationListeners.
- To maintain compatibility with older versions of the SDK, LocationManager#requestLocationUpdates(LocationRequest, LocationListener) will start positioning but also remove any other LocationListener references.
- Added the method LocationManager#getLocationRequest() to retrieve the LocationRequest used in the current positioning session. This is useful when using remote configuration as the values of the location request can be:
- Exactly those configured in the dashboard.
- The merge of remote and local parameters, if indicated when the positioning was started.
- Added support for Portuguese.
Fixed
- Fixed STOPPED status not being notified to LocationListener in building mode.
- LocationManager#isRunning() now returns true immediately after requesting location updates.
Version 2.83.9 – February 13, 2023 #
Fixed
- Fixed bug in which in the absence of sensor information the system temporarily returned an incorrect position before returning Out Of Building.
Changed
- Improved bearing quality estimation.
- Improved condition to return Out Of Building when positioning only with GNSS.
Version 2.83.8 – January 31, 2023 #
Changed
- Positioning improvements in outdoor fences
Version 2.83.7 – January 27, 2023 #
Fixed
- [Only in React native plugin] Crash that happened when you downloaded the Poi Category images
Version 2.83.6 – January 19, 2023 #
Added
Version 2.83.5 – January 10, 2023 #
Changed
- From now on, the ‘remote configuration’ option will always be set to true by default.
Version 2.83.4 – December 28, 2022 #
Changed
- Now you can start positioning using only indoor gps sensor, you no longer need to have BLE or WiFi enabled. Note that if you try to use this in a building not prepared to work with uncalibrated gps mode you won’t get any location.
Version 2.83.3 – December 19, 2022 #
Changed
- Added method toMap() for the domain public classes. This methods allows you to transform objects like Buildings or Geofences into an object of type Map<String, Object>. For more information check the Javadoc documentation.
Version 2.83.2 – December 16, 2022 #
Fixed
- Fixed Zip Path Traversal vulnerability. The Zip Path Traversal vulnerability is related to handling compressed archives and may prevent your app to be published on Google Play. The method fetchTilesFromBuilding(…) introduced the vulnerability in the SDK version 2.82.1 as it downloads and uncompresses a Zip file containing all the building map tiles. We have followed the documentation and now the vulnerability was completely fixed.
Version 2.83.1 – December 14, 2022 #
Version affected by Zip Path Traversal vulnerability. Fixed in version 2.83.2.
Added
- Added Turkish translations.
Version 2.83.0 – November 29, 2022 #
Version affected by Zip Path Traversal vulnerability. Fixed in version 2.83.2.
Changed
- Updated play-services-location library to version 21.0.1. If you use an older version of this library it may produce errors.
- When the user initiates positioning, the system calculates the position and the orientation of the user. Situm has improved the calculation of the orientation, being now more exact, especially when the user starts the positioning and user is stopped (most complicated case to calculate the orientation).
- When the user is outside building and leaves navigable zone, the system notifies an “out of building” message. If the user came back to the navigable area, the system took time to calculate a correct position. In this version, system reduces considerably the time it takes for calculate correct position.
- In the same building there can be floors that have been calibrated and exterior floors which is not necessary to calibrate, for example terraces. In this version, sytem has reduces the time it takes to detect change floor made by the user.
Version 2.82.1 – November 28, 2022 #
Version affected by Zip Path Traversal vulnerability. Fixed in version 2.83.2.
This is the recommended version if you’re targeting Android 13 (although previous versions will also work if you add the permission POST_NOTIFICATIONS to your Manifest).
Added
- New permission POST_NOTIFICATIONS for Android >= 13 devices.
- Added a new feature to download map tiles for a specific building. Tiles allow you to upload really large floor plans while maintaining a high display quality. We are publishing a specific API at CommunicationManager to manage map tiles, both online and offline:
- fetchTilesFromBuilding(buildingId, callback): download all the map tiles for the given building (provides offline map tiles).
- getTileFromBuilding(buildingId, floorId, x, y, zoom): returns a specific tile for the given building and floor. The Tile object will contain a path to the internal storage if it was previously fetched, otherwise a URL.
- invalidateTiles(): delete any tiles previously downloaded.
Changed
- SDK target & compile versions have been upgraded to API 33.
- Some deprecated methods have been refactored.
- autoEnableBleDuringPositioning(Boolean) does not work in Android 13. Learn how to auto-enable ble in this version here.
Version 2.82.0 – November 16, 2022 #
Added
- New method setLanguage(String code) that allows you to force the language in which you want the cartography names and info. In order of this to work you have to have it configured in the dashboard.
- New permission android.permission.HIGH_SAMPLING_RATE_SENSORS. We need this permission to be able to make fast scans of the gyro.
- EXPERIMENTAL New methods in PoiCategory getUnselectedIconBase64() and getSelectedIconBase64. This returns the images of the PoiCategory as a string coded in base64. Right now the strings comes empty because it is disabled by default.
Version 2.81.0 – November 04, 2022 – [Stable] #
Added
- New parameters in PoiCategory to obtain the poi image coded in base64.
Changed
- Now if the base64 string is available the images are never downloaded.
- Gps provider from Android to Google. If the google provider is not available in the device the Android provider will be used
Fixed
- Remote configuration now works offline
Version 2.80.1 – October 03, 2022 #
Changed
- Now the cartography objects (Building,POI,Floor) name and info (when the object has it) comes translated to the current phone language if they are configured in the dashboard. To configure this you have to put a custom field in the object you want with “name_en” as key and the name you want as value. You can put the language code that you want after “name_”.
Version 2.80.0 – September 30, 2022 #
Added
- SDK detects when the user enters or leaves geofences and advises it by GeofenceListener methods
Version 2.79.2 – September 19, 2022 #
Added
- Added Arabic translations.
Changed
- Beacon’s UUIDs filter was added again.
Version 2.79.1 – September 6, 2022 [beta] #
Changed
- Any beacon uuid can be now used for calibrating and positioning without any configuration
Version 2.79.0 – August 22, 2022 #
Added
- Added a new method DirectionsRequest.Builder#excluding(Circle). When requesting directions between two points, this method allows you to specify exclusion areas. The route will never contain a path that collides with the given circle, for example:
DirectionsRequest request = new DirectionsRequest.Builder()
.from(a)
.to(b)
.excluding(new Circle(c, radius))
.build();
SitumSdk.directionsManager().requestDirections(request, …);
// The given route will avoid the point c.
Version 2.78.0 – August 2, 2022 #
Added
- New functionality External provider locations. You can learn more about it in our documentation.
Changed
- Reduced time in the floor transitions
Fixed
- Problem with the accesible routes. They now work as intended
Version 2.77.0 – July 8, 2022 #
Added
- New LocationStatus AUTO_ENABLE_BLE_FORBIDDEN.
Fixed
- Bug reported on Huawei devices. Now autoEnableBluetooth mode is disabled on Huawei devices due to behaviour issues.
Version 2.76.2 – June 14, 2022 #
Fixed
- Fixed a crash on Android 12 devices produced when the bluetooth permissions (BLUETOOTH_SCAN and BLUETOOTH_CONNECT) are denied but the positioning is requested anyway.
Now the SDK notifies the new error MISSING_BLUETOOTH_PERMISSION.
Added
- MISSING_BLUETOOTH_PERMISSION error code at LocationManager.Code.
Version 2.76.1 – May 25, 2022 #
Changed
- Improved encryption security
Version 2.76.0 – May 10, 2022 #
Changed
- Downgrade Gradle version to 6.9 from 7.0.2 and Gradle Plugin Version to 4.2.2 from 7.0.2. The newer versions caused a crash in release versions when compiling apps with older Gradle versions.
Version 2.74.2 – April 27, 2022 #
Added
- Location includes rotation matrix data when positioning outdoor. This rotation is provided by the Android operating system.
- OutdoorLocationOptions.updateInterval no longer has a 1000ms minimum limit. This parameter now allows faster intervals. The default value is still 1000ms, but for AR applicaitons we recommend 62ms for a better user experience.
- We have slightly improved the speed at which we can calculate the user’s orientation once inside the building, allowing for a more seamless transition between outdoor and indoor positioning in AR apps.
Version 2.74.1 – March 28, 2022 – [Stable] #
Changed
- Update ARCore dependency version to 1.30.0
Version 2.74.0 – March 16, 2022 #
Added
- Location includes rotation matrix data when positioning indoor and deadReckoning is active. In the context of Android sensors, the rotation matrix allows you to map a point from the co-ordinate system of the phone (where the phone itself lies in the x-y plane) to the real world North/East/”Gravity-direction” co-ordinate system.
Version 2.73.0 – February 10, 2022 #
Added
- Added a fetchRemoteConfiguration(LocationRequest, Handler) method overload in CommunicationManager. This method gets the Remote Configuration and merges the given LocationRequest with the remote one so you can obtain all the parameters used in your positioning requests.
Improved
- Improves positioning initialization in buildings with large extensions of outdoor surface using the gps sensor.
Version 2.72.0 – December 20, 2021 #
Added
- Permission: android.permission.SCHEDULE_EXACT_ALARM. This mode is required to implement anti-DOZE meassures that keep Situm SDK running in the background.
Changed
- SDK now compiles and targets sdkVersion 31 (Android 12).
- The minimum supported version has been updated to sdkVersion 21 (Android 5.0). Official support has been withdrawn more than one year ago.
- A large amount of the SDK’s dependencies have been updated to their latest versions.
Removed
- Open Sky Detector is no longer available on devices running Android 12. It will still work on devices with Android 11 or lower. This feature has been deprecated and will be removed in future versions of the SDK.
Notes
Warning: Two new runtime permissions are required to guarantee the SDK functions correctly: android.permission.BLUETOOTH_SCAN and android.permission.BLUETOOTH_CONNECT. These permissions must be requested at runtime just like android.permission.ACCESS_FINE_LOCATION , for most SDK functionality involving bluetooth.
Warning: For this version of the SDK to work properly on Android 12 devices and above, the host app must target android api 31 or above.
Version 2.71.2 – November 25, 2021 #
Fixed
- Battery Saver now works when the RealtimeUpdateInterval is Never.
Removed
- Removed app icons added by mistake in the version 2.71.0
Version 2.71.1 – November 16, 2021 #
Changed
- An error is thrown with the correct code when the token expires and the sdk tries to obtain a new one. Previously, it always had the code 0.
- Removed redundant parameters cartesianPitch and cartesianRoll. Use pitch and roll instead.
Version 2.71.0 – November 15, 2021 #
Added
- The SDK can now restart bluetooth sensors if it suddenly stops detecting BLE signals. This has been implemented to mitigate the know issue where bluetooth sensors may stop detecting BLE signals without notice.
- Location now includes 3D orientation values pitch and roll. DeadReckoning must be on for these values to be calculated by the SDK.
Fixed
- Fixed bug where the floor plan’s rotation was not taken into account for movable buildings. This resulted in the user not positioning correctly on the Y axis in a movable building if the building floor plan was not horizontal.
Version 2.70.4 – October 27, 2021 #
Updated
- Updated CommunicationManager#invalidateCache() to also clear local database tables.
- Updated the cache strategy used to fetch points of interest custom fields. This keeps positioning information up to date and ensures that the SDK status is consistent even in environments that are still in testing (where positioning information changes frequently).
Fixed:
- Fixed a bug that led to erroneous building detections in changing environments.
Version 2.70.3 – October 20, 2021 #
Fixed
- From REST API v 1.86.1, if your account has beacons with the same major & minor, those will not be returned and therefore the the SDKs will not use them during the building detection process (WIFI_AND_BLE or BLE). However, under some edge circumstances the SDK used other beacon information (including repeated beacons if there were some in the account) and this resulted (sometimes) in a wrong building selection. This problem has been fixed and the building selection should work fine.
Version 2.70.2 – September 30, 2021 #
Fixed
- Fix a crash in the positioning mode added in the version 2.70.0
Version 2.70.1 – September 22, 2021 #
This version crashes in the indoor positioning mode. The version 2.70.2 fix this.
Fixed
- Always notify WiFi throttling when it is detected. The bug in the detection was added in a recent version
Version 2.70.0 – September 8, 2021 #
This version crashes in the indoor positioning mode. The version 2.70.2 fix this.
We have published a blog entry about this release here
Changed
- Migrated SDK to AndroidX libraries.
- Updated dependency protobuf-lite to protobuf-javalite.
- Other minor dependency updates
Removed
- Android Support Library is no longer supported. If you want to update to this or future versions of the SDK please migrate your project to AndroidX. Android Studio can migrate your project automatically.
Known Issues
Migrating to Situm SDK 2.70.0 from older versions can cause problems if your project contains old configurations. If that is your case, we recommend that you review the following checklist in your Android project:
- Check that you have already replaced all the support libraries by their counterparts in AndroidX.
- Update the Gradle version in your “gradle-wrapper.properties” file. There is not a recommended version, just update to a newer version and most of the time this will solve it.
- Update the Android Gradle plugin. We recommend using version 4.2 or higher. Also check that the Gradle version is supported (version 4.2 of the AGP requires Gradle 6.7 or higher).
- Check the JDK version used to run Gradle. From the Android Studio settings screen, or through the “org.gradle.java.home” entry in your “gradle.properties” file, check your Java home and also the compatibility with the Gradle version (for example, AGP 7 requires JDK11).
- Kotlin Gradle Plugin. We have experienced problems with kapt in versions lower than 1.3.72.
Notice that since Kotlin 1.4 it is not necessary to declare stdlib dependencies. - The Kotlin coroutines library. Update the version of the artifacts inline with the language version.
- Finally update third party dependencies.
- We have found problems using moshi 1.8. If that is your case, just update to a newer version (latest is 1.12).
Version 2.69.1 – August 17, 2021 #
Added
- Native support for querying the system about the status of WiFi Throttling on the device. This
allows Situm SDK to detect the current device state and automatically update the WiFi scan rate. Prior to this addition, WiFi Throttling was detected after exceeding the system scan limits, which produced a scan penalty time of aproximately two minutes in which it is not possible to receive WiFi scans.
Now WiFi Throttling can be detected beforehand in all versions except Android 10 (due to SO limitations), but you still can use LocationRequest.Builder#ignoreWifiThrottling method to avoid the two minutes of scan penalty time.
See the documentation for a full explanation. - Notifies LocationStatus.WIFI_SCAN_THROTTLED immediately when possible.
Due to a known issue this state will not be notified in Android 10 devices when the Global Mode is enabled. - A new method fetchRemoteConfig in CommunicationManager to asynchronously get the remote configuration values. A new object RemoteConfig is returned in a callback. It encapsulates a LocationRequest right now but is expected to grow in line with subsequent remote settings.
Fixed
- LocationRequest.Builder#ignoreWifiThrottling ignored when Global Mode is enabled.
- A crash produced by the use of invalid characters in a http header while getting the remote config.
- A bug produced when loading remote config with multiple accounts.
Upcoming changes
- We will update our dependencies in Situm SDK version 2.70.0. Notice that we will migrate to AndroidX as a replacement of Android Support Library. Therefore, all projects that want to incorporate the improvements added from version 2.70.0 onwards must also be migrated to AndroidX. We recommend that these projects also update their dependencies.
Version 2.69.0 – July 28, 2021 #
Added
- Enabled destructive migration fallback for SDK database. If a future version of the SDK needs to downgrade to this one and the database has suffered structural changes, the newer database will be wiped and this older version will be rebuilt.
- New functionality: Remote configuration. Now you can load the configuration from the Dashboard and the SDK will automatically use it if you enable it. You can learn more about this and how to use it here.
Removed
- The following list of deprecated methods have been removed:
- OutdoorLocationOptions.continuousMode()
- OutdoorLocationOptions.burstInterval()
- OutdoorLocationOptions.getMinNumberSatellitesToRunDetector()
- OutdoorLocationOptions.getMinSnrToUseSatellite()
- OutdoorLocationOptions.getMinPercentageToDetectOutdoor()
Version 2.68.8 – July 16, 2021 #
Fixed
- SDK returning duplicate positions every second. This does not affect Dead Reckoning
- If the SDK was running in the background and not using a Foreground Service, sometimes it would stop after being deprived from access to computing/sensor resources (probably caused by Doze Mode and Android energy saving policies). After this, the SDK state would be inconsistent and positioning could not be restarted.
Version 2.68.7 – June 30, 2021 #
Fixed a bug that caused CommunicationConfig to be ignored in prefetch. This caused floorplan images and POI icons to load during prefetch, although it was specified not to do so. The same happened with the specified cache strategy.
Version 2.68.6 – June 03, 2021 #
Fixed a bug in RealtimeClient added in a recent version that caused the listener to respond in a worker thread.
Version 2.68.5 – June 01, 2021 #
Fixed a bug that caused WIFI automatically turning on and off endlessly.
Fixed a bug that caused a crash if logout is called with a null callback.
Version 2.68.4 – May 24, 2021 #
Improved performance during prefetch. The SDK no longer blocks the main thread.
Fixed a bug that caused the SDK to stop positioning without updating its state to STOPPED
Modified the motion mode BY_CAR in order to improve performance of cleaning machines and forklifts positioning
Version 2.68.3 – May 19, 2021 #
Stop launching a dialog from the SDK when the wifi scanning is not always enabled
Improved the javadoc.
Version 2.68.2 – April 12, 2021 #
Fixed crash causing bug in scan based building selector
Version 2.68.0 – March 12, 2021 #
Now OrganizationTheme extends Resource
Fixed a crash in the building selector
Version 2.67.2 – January 27, 2021 #
Improved out of building detection when positioning with wifi and ble
Version 2.67.1 – January 11, 2021 #
Increase the time before starting the battery saving mode
Version 2.67.0 – December 17, 2020 #
Added CommunicationManager.fetchAllPOIsFromUser
Improved indoor positioning experience with Android 9 devices
Version 2.66.0 – December 09, 2020 #
Included options to control the interval of computing and updating outdoor locations
Version 2.65.0 – November 24, 2020 #
Add Location.customFields
Deprecated LocationRequest.IndoorProvider.SUPPORT
Fixed some bugs in the geofences positioning
Version 2.64.1 – November 11, 2020 #
Upgrade compileSdkVersion to 30
Upgrade targetSdkVersion to 30
Fixed ocasional crash when using OutdoorLocationOptions.useGeofencesInBuildingSelector
Version 2.63.2 – November 02, 2020 #
Removed unnecessary ACCESS_BACKGROUND_LOCATION permission
Version 2.63.1 – October 01, 2020 #
Improved the use of geofences in the building selector
Version 2.63.0 – September 15, 2020 #
Add new option LocationRequest.useLocationsCache to activate the position cache. If activated it will smooth dispersion of initial positions on starts that occur shortly after stopping..
Add new option OutdoorLocationOption.enableOpenSkyDetector to activate open sky detector. By default it is deactivated.
Version 2.62.0 – August 25, 2020 #
Add new option OutdoorLocationOptions.useGeofencesInBuildingSelector to use the geofences in global positioning. This will help the scans based detector (BLE,WIFI and WIFI_AND_BLE) select the building.
Version 2.61.1 – August 05, 2020 #
Fix bug in battery saver mode that caused the sdk to upload locations to realtime when it should not
Version 2.61.0 – July 23, 2020 #
Added new option OutdoorLocationOptions.enableOutdoorPositions(Boolean) that can be used stop the SDK returning outdoor positions while GlobalLocation is on. This new feature is incompatible with BuildingDetector.GPS_PROXIMTY.
Added support for building custom field use_gps. This custom field can be used to deactivate the use of gps data in indoor positioning for specific buildings.
Version 2.60.2 – July 16, 2020 #
Fixed a bug in the positioning notification, in Android 6 sometimes crashed and in other versions was not showed.
Version 2.60.1 – June 23, 2020 #
Fixed a bug in positioning, when starting sometimes the db was accesed in the main thread and caused a crash.
Version 2.60.0 – June 15, 2020 #
Add the geofences list in BuildingInfo.
Fixed a bug in the POI icons download when the SDK was updated from older versions
Version 2.59.2 – June 09, 2020 #
Fixed a bug in the realtime upload.
Version 2.59.1 – June 04, 2020 #
Updated CacheStrategy names. DEFAULT is now called TIMED_CACHE and FORCE_DOWNLOAD is now called IGNORE_CACHE.
Version 2.59.0 – June 01, 2020 #
Implemented new Configuration system for CommunicationManager. Deprecated methods with older configuration system.
Version 2.58.1 – May 18, 2020 #
Fixed a bug in positioning system that caused a crash
Version 2.58.0 – April 21, 2020 #
Added OutdoorLocationOptions.minimumOutdoorLocationAccuracy. With this option you can select the minimum accuracy that an outdoor position must have to be returned by the LocationListener
Version 2.57.1 – April 13, 2020 #
Fixed a bug in CommunicationManager.prefetchPositioningInfo. Sometimes there was some info that was not downloaded
Version 2.56.0 – March 09, 2020 #
Added LocationStatus.STOPPED that indicates when positioning has been stopped
Added LocationManager.ConfigurationError that is thrown when the LocationRequest is not configured properly
Fixed bug in positioning, sometimes the positioning stopped but an error was not notified
Version 2.55.0 – March 03, 2020 #
Added option LocationRequest.preloadInfo. If true, this option will download POI and Floor images on location start.
Fixed offline positioning bug.
Version 2.54.0 – February 26, 2020 #
Added error LocationManager.START_SERVICE_FAILED. This error is thrown if the positioning is started when the app is in background and LocationRequest.useForegroundService is false.
Version 2.53.0 – February 20, 2020 #
Added option OutdoorLocationOptions.centerPositionInBuildingDuringTransition to center position in building when transitioning from outdoor to indoor position while using BLE and/or WIFI based building detection.
Version 2.52.0 – February 17, 2020 #
Improved positioning startup times for global positioning using scans based building detection.
Version 2.51.0 – February 12, 2020 #
Change method CommunicationManager.prefetchInfo name to CommunicationManager.prefetchPositioningInfo and add Floor and POICategory images download. Improved the documentation.
Remove CommunicationManager.PREFETCH_INFO_ERROR
Version 2.50.1 – February 06, 2020 #
Indoor-outdoor positioning will notify of errors, and stop positioning ,while trying to obtain building information. Previously it would retry endlessly.
Version 2.50.0 – February 05, 2020 #
Added new methods to download all the info neccesary to position in the building or buildings you want. The methods are in CommunicationManager.prefetchInfo and you can download the info of all account buildings or some of them
Version 2.49.0 – February 04, 2020 #
Scans based building detection can now be configured to work while positioning. New option scansBasedDetectorAlwaysOn in OutdoorLocationOptions.Builder
Version 2.48.1 – January 30, 2020 #
Fix crash in the SDK init added in the version 2.46.7
Version 2.48.0 – January 23, 2020 #
Added CommunicationOptions.PRELOAD_IMAGES. Set this option to false when calling the methods of CommunicationManager to prevent the Floor and POI images from being downloaded when calling methods that do not download them specifically like fetchBuildingInfo or fetchFloorsFromBuilding
Improve load time to start positioning in big buildings
Version 2.47.0 – January 21, 2020 #
Added RealtimeUpdateInterval.NEVER option to never upload the locations to the realtime dashboard
Version 2.46.7 – January 16, 2020 #
Improve floor changes when the barometer is used
Minor fixes
Version 2.46.6 – December 20, 2019 #
Fix a bug that caused a memory leak
Version 2.46.5 – December 13, 2019 #
Fix a bug that blocks the main thread when positioning service is starting
Version 2.46.4 – November 25, 2019 #
Fix a bug in the method Configuration.allowInvalidSSLCertificate
Version 2.46.3 – November 20, 2019 #
Minor fixes and improvements
Version 2.46.2 – November 14, 2019 #
Update targetSdkVersion to 28
Version 2.46.1 – November 08, 2019 #
Fixed an issue with positions file upload in different locales.
Version 2.46.0 – November 06, 2019 #
Added new functionality to follow devices (beacons) of your interest.
Version 2.45.0 – October 29, 2019 #
Added new functionalities to directions API
Added support to background positioning in Android 10
Update compileSdkVersion to 29
Version 2.43.0 – October 08, 2019 #
Added WIFI_SCAN_THROTTLED to LocationStatus to notify when the WiFi scan throttling is detected in Android 10
Added ignoreWifiThrottling to LocationRequest to set if you want to ignore the WiFi scan throttling during the positioning in Android 10. If set to true the SDK will perform a background check on the WiFi scans and if the throttling is detected the scan interval will change to one scan every 30 seconds and a LocationStatus will be sent. The default value is false.
Version 2.42.0 – October 03, 2019 #
Included option to use route to better adjut locations. Check LocationManager (updateLocationParameters) for more details.
Version 2.41.1 – October 01, 2019 #
Fixed the dead reckoning in the indoor-outdoor mode
Version 2.41.0 – September 20, 2019 #
Deprecated description property from geofence. Use htmlInfo instead so api is consistent with same properties of different objects
Deprecated level from Floor object. Using floor instead.
Version 2.40.0 – July 11, 2019 #
Added Geofence class and CommunicationManager.fetchGeofencesFromBuilding(Building) method to download the geofences of a building
Added method OutdoorLocationOptions.Builder.buildingDetector(BuildingDetector) to selected the building detector used in indoor-outdoor mode to find the building where the user is located
Version 2.39.0 – June 26, 2019 #
Added new info to Floor model: name and custom fields
Fixed an issue with indoor-outdoor initialization
Version 2.38.0 – June 06, 2019 #
Improved robustness of battery saver mode: it allows you to save battery when the smartphone is not moving
Improved indoor-outdoor using only outdoor locations with good accuracy
Version 2.37.11 – June 03, 2019 #
Fixed Google Play Security Alert “Your app contains an unsafe unzipping pattern that may lead to a Path Traversal vulnerability”
Improved download images time
Version 2.37.6 – May 22, 2019 #
Improved indoor-outdoor transitions
Other minor improvements and fixes
Version 2.37.3 – May 13, 2019 #
Fixes to navigation and positioning
Version 2.37.0 – April 16, 2019 #
Added new constructor for Point Point#Point(Building, String, Coordinate) to create and indoor Point
Version 2.36.0 – April 09, 2019 #
Added useBarometer to location request to use barometer for positioning.
Version 2.35.1 – March 27, 2019 #
Added data persistence to prevent realtime information loss
Version 2.35.0 – March 25, 2019 #
Added method NavigationProgress.getPoints() that return the route points left to reach the destination
Added methods Route.getSegments() and NavigationProgress.getSegments() that return the route segments of the route split by floor. This method is intended to make it easy to draw polylines.
Deprecated Filter class and Filterable interface
Version 2.34.1 – March 14, 2019 #
Added LocationStatus.LOCATION_DISABLED status that would be sent when the location is disabled. You should prompt the user to enable it, otherwise the Wi-Fi and BLE scanning will not work.
Improved the transition from indoor to outdoor
Version 2.33.0 – March 12, 2019 #
Added method NavigationRequest#Builder#ignoreLowQualityLocations(boolean) to set if low quality locations should be ignored during navigation. This will make navigation updates more reliable. For more information see the Javadoc
Version 2.32.3 – March 07, 2019 #
Fix crash starting the positioning using BLE
Version 2.32.2 – March 06, 2019 #
Improved the performance of the gps in the indoor positioning mode.
Version 2.32.1 – February 27, 2019 #
Added reading of new custom fields: use_wifi_floor_classifier and use_ble_floor_classifier from dashboard.
Version 2.32.0 – February 21, 2019 #
Updated ArCore library from version 1.5.0 to 1.7.0
Added LocationManager.VISUAL_ODOMETRY_ERROR code that is returned in the positioning with the camera activated when ArCore thrown an error during the start
Version 2.31.5 – February 20, 2019 #
Fix crash when starting the positioning foreground service from the background
Version 2.31.3 – February 11, 2019 #
Added reading of new custom fields: return_gps_pose_outdoors and gps_default_floor_id from dashboard.
Version 2.31.2 – January 28, 2019 #
Modified the next NavigationRequest default values so that they adapt better to large buildings. This will change the default behaviour of previous versions.
- Increased NavigationRequest.distanceToGoalThreshold from 5 to 15 meters
- Increased NavigationRequest.distanceToFloorChangeThreshold from 10 to 15 meters
- Increased NavigationRequest.distanceToChangeIndicationThreshold from 5 to 8 meters
Fix Indoor-outdoor transition issues
Version 2.31.0 – January 11, 2019 #
Added autoEnableBleDuringPositioning to LocationRequest to set if you want to disable that the SDK enable automatically the BLE sensor if the user disables it. The default value is true.
Added `LocationStatus.BLE_SENSOR_DISABLED_BY_USER` that would be sent when the user disables the BLE sensor. If autoEnableBleDuringPositioning is disabled you should prompt the use the enable it. BLE scanning is not possible if the sensor is disabled.
Improved compatibility with Android 9.
Version 2.30.4 – December 20, 2018 #
Indoor GPS improvements
Version 2.30.3 – December 18, 2018 #
Added metadata
Version 2.30.1 – December 04, 2018 #
Improved WiFi scanning. Now it works in Android 9 with its restrictions (one scan every 30s).
Version 2.30.0 – November 27, 2018 #
Added accessibilityMode to DirectionsRequest. Now you can force routes to use not accessible floor changes (stairs). Deprecated DirectionsRequest.Builder.accessible(boolean)
Version 2.29.1 – November 22, 2018 #
Improved floor transitions
Version 2.29.0 – November 20, 2018 #
Added useGyro(boolean) to LocationRequest to add the option to disable the gyro for positioning
Added useCompass(boolean) to LocationRequest to add the option to disable the compass for positioning
Version 2.28.1 – November 15, 2018 #
Improved auth token renovation
Fix disappearing outdoor locations in realtime in some circunstances
Version 2.28.0 – November 08, 2018 #
Updated Play Services Location library from version 11.2.0 to 16.0.0
Updated Support libraries from version 26.1.0 to 28.0.0
Version 2.27.0 – October 31, 2018 #
Added new MotionMode.VEHICLE_VISUAL_ODOMETRY to be used with the camera in a vehicle
Removed LocationRequest.useCamera(boolean) and replaced with MotionMode.BY_FOOT_VISUAL_ODOMETRY
Version 2.26.2 – October 23, 2018 #
Added load of beacons_uuids building custom field automatically. Now you don’t have to configure them in your code, you only set them once in the Dashboard. See Terminology page.
Version 2.26.0 – October 18, 2018 #
Added useCamera(boolean) to LocationRequest to use the camera for positioning. This is an experimental feature.
Fix returning LocationManager.isRunning() returning true after stoping the positioning
Version 2.25.6 – October 15, 2018 #
Fixed a bug when BLE setting was disabled.
Update to API 26.
Version 2.25.5 – October 02, 2018 #
Fixed wifi scanning when wifi status was changing constantly.
Fixed a bug that did not show how to enable wifi scanning in some Samsung devices.
Version 2.25.4 – September 18, 2018 #
Internal improvements.
Version 2.25.3 – September 12, 2018 #
Removed v1 classes.
Version 2.25.2 – September 06, 2018 #
Fixed BLE scanning in background with the screen off on Android 8+. The smartphone stopped scanning after some minutes.
Version 2.25.1 – September 04, 2018 #
Fixed realtime upload when using the RealtimeUpdateInterval.BATTERY_SAVER value
Version 2.25.0 – August 27, 2018 #
Refactored SitumEvent class. Deprecated some attributes and added trigger and conversion attributes and getters.
Version 2.24.3 – August 20, 2018 #
Added LocationStatus#GLOBAL_LOCATION_NOT_FOUND that is returned in indoor-outdoor mode when the Google Location Services don’t return any Location during the first 30s in the initilization phase.
Fixed a bug when the Google Location Services don’t return any location during the first 30s in initialization phase
Version 2.24.2 – August 06, 2018 #
Removed deprecated v1 classes from Javadoc
Version 2.24.0 – July 24, 2018 #
Added new errors when calculating routes: DirectionsManager.Code#GRAPH_NOT_FOUND and DirectionsManager.Code#GRAPH_BETWEEN_TWO_POINTS_NOT_FOUND returned when the building or the origin/destination floor has no paths
Reduced data usage sending locations to Realtime
Version 2.23.0 – June 28, 2018 #
Added option useGps(boolean) to LocationRequest.Builder to use GPS in indoor mode to improve the positioning
Version 2.22.0 – June 19, 2018 #
Added new algorithm to calculate routes that minimizes the number of floor change transitions (e.g. using one lift instead of two lifts) even if the route is longer. The default algorithm calculates the shortest route independent of floor changes. You can use the new algorithm setting passing true to the new option minimizeFloorChanges(bool) in DirectionRequest.Builder
On navigation during a floor change transition, fixed calling onUserOutsideRoute() when the user is positioning between the origin and destination floor
Fixed some invalid instructions in rare situations
Other internal performance improvements
Version 2.21.1 – June 05, 2018 #
During navigation, fix calling onDestinationReached() when the location is in a different floor than the destination and there is only a floor change left
Version 2.21.0 – May 24, 2018 #
Added method CommunicationManager#fetchOrganizationTheme() to fetch the organization theme
Version 2.20.1 – May 23, 2018 #
Increased HTTP request timeout to 40s
Version 2.20.0 – May 21, 2018 #
Added support for x86 and x86_64 architectures
Version 2.19.0 – May 16, 2018 #
Added method NavigationProgress#getClosestLocationInRoute() that returns the projected Location in the route. This will replace the method getClosestPointInRoute() (now deprecated) that returns a Point
Added method NavigationRequest#Builder#timeToIgnoreUnexpectedFloorChanges(long) to set the maximum time (in millis) to ignore locations in unexpected floors during a floor change indication during navigation. This will improve navigation experience during floor transitions
Version 2.18.2 – May 02, 2018 #
More improvements to indications during navigation
Version 2.18.0 – April 17, 2018 #
Improved indications during navigation. Added new options in NavigationRequest:
- Added NavigationRequest#Builder#indicationsInterval(long) to set the interval to return indications during navigation
- Added NavigationRequest#Builder#timeToFirstIndication(long) to set the time to return the first indication when starting navigation. While starting it will return a CALCULATING indication
- Added NavigationRequest#Builder#roundIndicationsStep(int) to group the distances of the indications
Added method RouteStep#hasFloorChange() that return true if there is a floor change in that route step
Fixed a crash in NavigationManager#requestDirections()
Version 2.17.0 – March 22, 2018 #
Now you can configure the distance to receive the next indication during navigation with the method NavigationRequest.Builder#distanceToChangeIndicationThreshold(double distanceToChangeIndicationThreshold)
Fix BLE not scanning in Android 8.1 when the screen is off
Other minor improvements and fixes
Version 2.16.0 – February 28, 2018 #
Fixed notification channel needed in Android 8 for the Foreground notification
Show CHANGE_FLOOR indication when the user gets within a given threshold around a floor change. Added NavigationRequest.Builder#distanceToChangeFloorThreshold(double distanceToChangeFloorThreshold) and RouteStep.Builder.distanceToFloorChange(Double distanceToFloorChange)
Edit CHANGE_FLOOR indication to show destination level insted the number of levels to go up/down. Added Indication#getNextLevel()
Version 2.15.0 – February 20, 2018 #
Increased minSdkVersion from API 15 to API 16
Added notification channel needed in Android 8 for the Foreground notification
Other minor fixes
Version 2.14.3 – January 30, 2018 #
Added new LocationStatus.TIME_SETTINGS_MANUAL status message that will be sent when the device date & time is not set to automatic
Other minor fixes
Version 2.14.2 – January 22, 2018 #
Indoor-outdoor positioning fixes
Version 2.14.0 – January 09, 2018 #
Add internal support information
Minor positioning improvements
Version 2.13.0 – December 20, 2017 #
Now LocationRequest.useForegroundService(boolean) option is enabled by default. See Using Situm SDK in the background page for more information.
Improve memory management when downloading images
Other minor improvements
Version 2.12.1 – December 13, 2017 #
Fix orientation issue when uploading indoor locations to Realtime
Version 2.12.0 – November 29, 2017 #
Added more information when starting the positioning that will be sent in the LocationListener#onStatusChanged method: PREPARING_POSITIONING_MODEL, START_DOWNLOADING_POSITIONING_MODEL, RETRY_DOWNLOAD_POSITIONING_MODEL, RETRY_DOWNLOAD_POSITIONING_MODEL and STARTING_POSITIONING.
Deprecated the next LocationRequest.IndoorProvider enum values: HYBRID and CLOUD. They are replaced with INPHONE mode. Added new SUPPORT mode to use only in communication with Situm support team
Improved positioning system and network data usage
Version 2.11.0 – November 14, 2017 #
Minor improvements to positioning system
Version 2.10.1 – November 07, 2017 #
Added new realtime upload interval, REALTIME, in LocationRequest that will upload locations every second. This interval is now the default value
Change the default indoor provider in LocationRequest from HYBRID to INPHONE
Version 2.10.0 – October 31, 2017 #
Improved some edge cases in positioning
Updated Play Services from version 10.0.1 to version 11.2.0. You will need to update your Gradle build scripts, see Play Services version 11.2.0 Release Notes
Updated support libraries from 23.4.0 to 25.2.0
Fixed that RealtimeManager returned outdoor locations with isIndoor() to true and with floorIdentifier empty
Improved indications returned by NavigationProgress
Version 2.9.0 – September 18, 2017 #
Added a battery saver mode that will save battery when the phone is not moving. You can enable it with the method LocationRequest.Builder#useBatterySaver(boolean)
Added option NavigationRequest#distanceToIgnoreFirstIndication(double) to ignore the first indication if the distance to the next is less than the value passed to the method
Added method Location.Builder#timestamp(long)
Improved indoor-outdoor transition
Other minor fixes to route calculation and indications
Version 2.8.1 – September 11, 2017 #
Fix an issue when positioning or calibrating in a building with a lot of WiFi APs
Version 2.8.0 – September 04, 2017 #
Added method Coordinate#distanceTo()
Added new constructor for Point Point#Point(Building, String, CartesianCoordinate) to create and indoor Point
Added method LocationRequest.Builder#smallestDisplacement(float) to set the minimum displacement between location updates
Added method LocationRequest.Builder#realtimeUpdateInterval(RealtimeUpdateInterval to change the realtime upload interval. This will improve the battery duration if the indoor provider is set to Inphone
Now the method LocationRequest.Builder#interval(float) is used to set the minimum interval between location updates
Internal improvements the location service and network data usage
Other minor fixes
Version 2.7.0 – August 02, 2017 #
Improved BLE and WiFi scanning. This will increase the positioning accuracy
Fixed scanning issues in some devices
Fixed starting the positioning in the main thread that caused the ui to block
Fixed SitumSdk#getVersion() method
Internal improvements to calibrations
Other minor fixes
Version 2.6.0 – June 30, 2017 #
Added RealtimeManager class. Now you can get the positioning users in realtime. Start using it with SitumSdk#realtimeManager()
Now you can use your custom beacon UUIDs for positioning. You can add them to the LocationRequest with the methods addBeaconFilter(BeaconFilter) and addBeaconFilters(List)
Other internal improvements
Version 2.5.0 – June 07, 2017 #
Added Dead Reckoning option in LocationRequest class to update the location bearing in ‘real-time’. Use the method LocationRequest#useDeadReckoning(boolean) to enable it
Other minor fixes and internal improvements
Version 2.4.0 – May 12, 2017 #
Added upload of locations to the realtime when using the Inphone indoor location provider
Other minor fixes and internal improvements
Version 2.3.0 – April 26, 2017 #
Improved positioning accuracy
Added the posibility to simulate locations with your own implementation of LocationManager that you can set in SitumSdk#setSimulatedLocationManager(LocationManager). To check if the SDK is using simulated locations the method SitumSdk#isUsingSimulatedLocationManager() is added
Fix POI categories not assigned correctly when calling CommunicationManager#fetchBuildingInfo() method
Fix CommunicationManager#fetchPoiCategoryIconNormal() returning the selected icon and CommunicationManager#fetchPoiCategoryIconSelected() returning the normal icon
Other minor fixes and improvements
Version 2.2.0 – April 20, 2017 #
Added method Location#getBearingQuality() to get the bearing quality. In indoors this will return the value calculated by the positioning system, in outdoors it will always return Quality#HIGH
Now Location#getCartesianBearing() and Location#getBearing() will return always the value calculated by the positioning system (like in SDK v1) but it can be unreliable, you must check Location#getBearingQuality(). For compatibility, Location#hasCartesianBearing() and Location#hasBearing() return True only if the Location has orientation and quality is Quality#HIGH
Improved Angle#toString() output
Version 2.1.0 – April 10, 2017 #
Added custom fields to SitumEvent, you can access to them with SitumEvent#getCustomFields()
Added getVersion() to SitumSdk class
With LocationRequest.Buider.interval(int) now you can configure with the interval to send data to the server to compute locations
Minor fixes
Version 2.0.1 – March 31, 2017 #
Fixed a bug when starting indoor-outdoor location with an user without builings
Fixed a bug with indications calculation
Fix issue with location bearing computation
Version 2.0.0 – March 28, 2017 #
Added indoor-outdoor mode
Added new interfaces to make it easy to use the SDK. See the migration guide
Reduced the configuration you need to start working with the SDK. Take a look to the new quickstart guide
Deprecated the old interfaces
Version 1.66g – February 15, 2017 #
Added an option in SitumPositioningOptions to select the indoor location provider: hybrid, cloud or inphone
Other minor fixes
Version 1.66e – November 23, 2016 #
Minor fixes to positioning
Version 1.66d – September 27, 2016 #
Added method SitumIpsManager#isRunning() to check if the positioning is running.
Minor changes to BLE scanning
Version 1.66c – September 20, 2016 #
Fix SitumDataManager callbacks not returning on main thread
Minor improvements to positioning
Version 1.66b – September 01, 2016 #
Added new methods with parameter options, fetchIndoorPOIsForBuilding and fetchOutdoorPOIsForBuilding, to filter the received pois by the custom fields.
Minor improvements.
Version 1.66 – August 30, 2016 #
Removed READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions. Now are optionals.
Now Point2f and SitumFloorPoint classes implement the Parcelable interface.
Added two new methods in SitumBaseLogin:
- setDashboardUrl(): allows to change the Dashboard URL.
- setDefaultDashboardUrl(): changes the Dashboard URL to the SDK’s default value.
Added method getDashboardUrl() in SitumBaseDataManager to obtain the Dashboard URL.
Added BUILDING_WITH_NO_CALIBRATIONS error in SitumError.
Added the possibility to adjust the position a route during navigation.
Added the following methods in SitumIPSManager class:
- adjustLocationToRoute(list<SitumFloorPoint>): starts setting the next localizations received to a route.
- stopAdjustingLocation(), for setting the localizations to the route.
- isAdjustingLocation(): it returns true if the setting localizations to a route is activated
Version 1.65c – July 28, 2016 #
If proguard is used to obfuscate the apk’s, it is required include the following line into the proguard-rules:
keep class es.situm.sdk.v1.** { *;}
The method of the SitumIndoorPOI.getLevelid() class is renamed to SitumIndoorPOI.getLevelId().
The method of the SitumPOI.getHtmldescription() class is renamed to SitumPOI.getDescription().
Version 1.65b – July 22, 2016 #
A method is added in SitumBaseDataManager to invalidate the cache: invalidateCache().