V3
Note that support for MapsIndoors Android SDK v3 ended on September 1, 2024. You should update to MapsIndoors SDK v4 at your earliest convenience to get the latest features and updates to MapsIndoors.
Last updated
Note that support for MapsIndoors Android SDK v3 ended on September 1, 2024. You should update to MapsIndoors SDK v4 at your earliest convenience to get the latest features and updates to MapsIndoors.
Last updated
Updated MapsPeople watermark
Fixed issue where destroying MapControl
could result in a crash
Fixed issue where tiles would not render when map is loaded
Re-introduced old overlap strategy where the entire marker would be made invisible if it overlapped another.
Use mapControl.setMarkerIndependentIconLabel(false)
to enable it.
Fixed issue where older devices would be unable to connect to MapsIndoors services
Fixed issue where reload would cause markers to ignore location specific rules
Fixed crash that could occur when destroying mapcontrol
Fixed issue where rendering would seem to stop, only to resume a while later
Fixed rare occurrence where the camera would move to the other side of the world during routing
Fixed rare issue where routing to entry points might fail
Fixed issue where icons would not update automatically
Fixed sometimes deleted PolygonDisplayRule
would leave behind a Polygon
on the map that could not be removed
getDisplayRule(MPLocation)
on MapControl
would return null, even when a display rule exists for the location
Fixed issue with markers sometimes not appearing, on a fresh app install
Fixed issue with overriding PolygonDisplayRule
not being reflected on the map
Fixed issue with contextual route rendering, where a crash would occur if no available marker icon was found.
Fixed crash where BitmapDescriptorFactory
would cause various memory related runtime exceptions under rare circumstances
Issue with MapControl.onStart() being called before initialization
Issue with rendering locations containing polygon display rules that was not an area
A memory leak when calling MapControl.onDestroy()
Issue with tint on shared drawables
Stability fixes
Interface for querying distance matrix services using getDistanceMatrix()
on MPRoutingProvider
Various bugs and crashes
Crash where the SDK would potentially execute on the wrong thread when modifying display rules
Crash where large marker icons would exceed the device's OpenGL max texture size limit
Fixed issue with category filter not being respected on MPFilter
Minor security additions
Fixed issue with setTileSize()
not working
Added isInitialized()
to MPDataSetCacheManager
to check whether it has been initialized
Toned down rendering frequency in some cases
Introduced a number of stability fixes
Fixed SDK not syncing correctly after calling MapsIndoors.synchronizeContent()
if App User Roles have been applied
Fixed SDK routing not working with restricted Google API keys
Fixed clusters sometimes showing incorrect number of clustered locations
Added Venue.hasGraph()
which checks whether the venue has a valid routing graph configured
Fixed App User Roles not syncing correctly, leading to unexpected behavior
Optimized inital rendering of new Markers
User roles set on MapsIndoors are now implicitly applied to directions, unless explicitly set on MPRoutingProvider
Deprecated MapControl.unbindFromMap()
Fixed issue where MapControl.init()
's listener was invoked too soon
Fixed an issue where markers may not show on the map on subsequent loading of the same API key
Fixed an issue with MapControl.setApiKey()
where the onLoadingReadyListener would never be invoked
Fixed crash that occurs when calling MapControl.onDestroy()
multiple times
Fixed crash due to markers being removed before changes could be applied to them
Tweaked how bitmaps are stored in the SDK to lower retained memory size
Reduced heap size by up to 90% depending on solution configuration
Tweaked area rendering to improve rendering performance
MapsIndoors.setGoogleAPIKey()
can now be called before MapsIndoors.Initialize()
Improved SDK stability when receiving unknown HTTP responses
Deprecated MPRoutingProvider.queryMultipleDestinations()
Deprecated RouteStep.addSteps()
Use RouteStep.setSteps()
instead
Fixed memory leak
Fixed issue that caused SDK to crash when launched in offline mode
Fixed issue where receiving a HTTP 500 response crashed the SDK
Fixed crash that could occur when selecting specific locations
Fixed issue that caused the SDK to not show proper tiles in some cases
Various fixes and improvements
Fixed issue where map padding was not always applied when changed on runtime
Fixed issue with a internal library conflicting with newer versions of firebase libraries
Fixed issue with custom images on locations not being applied on load
Fixed crash appearing when frequently reloading solutions
Fixed behavior where no tiles are shown
Fixed issue with external routes choosing the wrong entry point
Various crashes
Fixed a potential crash when changing API keys rapidly
Fixed tiles not being rendered
Fixed caching issue with images
Added MPConstants
, which in this first iteration exposes a number of constants related to Z-index levels on the google map
Upped target SDK version to 31 (Android 12)
Made changes to rendering such that the contents of the map are updated more often
Deprecated MPDatasetCacheManager.getConcurrentTaskLimit()
Deprecated MPDatasetCacheManager.setConcurrentTaskLimits()
Fixed issues with linebreaks
Fixed issue where the floor selector was unremoveable
Fixed manifest issue that was blocking use of the SDK in Android 12 apps
Fixed issue where the SDK continued to be 'ready' for a short period after setting user roles
Fixed an issue where MPQuery.setNear()
ignored the Z-index of the parameter
Fixed an issue where initializing the SDK with an invalid API key would lock it
Various minor fixes
Added getTranslatedName()
to POIType, which can get the name of a type in plaintext in the correct language
Added getLatLngBounds()
to Route
Route.getWaypoint_order()
Fixed crash from adding a listener to the LiveDataManager
Fixed crash where icons did not have a valid resource
Fixed FloorSelector sometimes not being visible
Fixed bug that showed wrong directions when changing floors
Fixed bug where searching for a specific location could include all available locations
Fixed issue where cache was deleted from SDK before sync was initiated
Fixed rare NPE that could occur when switching solutions
Fixed Various other bugs and crashes
Fixed issue where LocationSource was Available before it was completely updated
Various minor fixes
Icon and labels are now handled independently
Icons and labels are now separate entities when computing overlaps/collisions
Icons and labels can now be shown/hidden at different zoom levels, according to the display rule
Contextual routing information
Now able to allow for context taken from nearby POI's of a given type, using the MPDirectionsRenderer
Support for authentication
Added interface to support single side sign-on from OpenIDConnect providers by setting tokens, which will allow access to otherwise restricted MapsIndoors API keys
User authenticated booking
Revised booking interface to set a token, in order to allow for booking on user calenders
Significant improvements to loading performance
Fixed issue where on marker click event was not forwarded properly to Google Maps
Fixed rare issue where MapControl may never invoke the set listener, upon initialization (OnLoadingDataReadyListener)
Fixed issue where markers may be retained on the map, when changing floors
Various minor fixes
setLocationHideOnIconOverlapEnabled
can now be toggled dynamically
setLabelMaxWidth
now takes DP (Device-independent Pixels) instead of actual pixels in its parameter
Files being deleted outside of scope
Potential crash when initializing large solutions
Tiles are now rendering with improved resolution
Memory leaks
Support for obstacle avoidance zones in routing
Static method on MapsIndoors to disable internal SDK event logging
Support for 'ladder' highways
Icons for ramps, wheelchair ramps and wheelchair lifts
'Go to previous leg' behavior added on start marker of a routing line
Line breaking ability for marker labels. Line breaks can now be enforced manually with '\n' in location names or automated to wrap based on a set labelWidth. (Currently only accessible though overriding LocationDisplayRules)
Wait times reflected correctly when using offline routing
Search results are now naturally ordered
Various loading & SDK initialization issues
Various route directions rendering glitches
Various crashes and issues
Crash on file reads with external library.
Fixed bug with Areas sometimes not being rendered correctly.
MapsIndoors now triggers as ready when Locations are loaded.
Issue with setApiKey
loading new Solutions. You can now switch between Solutions again by calling setAPIKey
, and initializing a new MapControl
object.
Applying PolygonDisplayRules
on Locations that does not have Polygon geometry no longer causes a crash
Issue with Tiles not loading, if a custom Floor Selector is implemented
Using near
on MPQuery
now gives a better ordering in the list in terms of what is near the set location
Various bug fixes and stability issues
Fixed a rare null pointer exception crash related to area polygon display rules rendering
The MapsIndoors SDK records anonymous usage statistics and diagnostic events per default (if enabled in the CMS) and sends the logged data to a server at MapsPeople. Logging may be disabled entirely by calling MapsIndoors.disableEventLogging(true)
on the SDK.
Deprecated MapsIndoors.setOnMapsIndoorsReadyListener(onReadyListener)
. Use MapsIndoors.addOnMapsIndoorsReadyListener(onReadyListener)
instead.
Polygon DisplayRules can now be applied to all Locations with a polygon, not just Areas
Live Data badges now correctly scale according to the device's pixel density
Various bug fixes and stability issues
Fixed rare null pointer crash on MPImageProvider
Fixed issue with down-scoping datasets to basic scope, upon synchronizing
Routing animation no longer flashes when being animated
The MapsPeople logo now shows when using a FragmentActivity
Fixed a certificate issue with lower Android APIs making Live Data and Tiles unavailable
Selected Locations are now shown, even if another Location was overlapping it with setLocationHideOnIconOverlapEnabled
Various bug fixes and stability issues
Added two new Domain Types with default renderings (CO2 and Humidity)
Made default rendered Live Data badge text more readable
Added a method to change the text size of marker labels with setMapLabelTextSize(int textSize)
The POI's label text is now centered on the locaiton, when no icon is shown
Search has been improved & the "near" parameter works as intended
Various bugfixes & stability issues
LiveData domains for temerapture & count added
LiveData topic for CiscoDNA positioning integration added
Fade-in effect on MapsIndoors tiles (enabled by default)
Set font styling of labels using setMapLabelFont() and setMapLabelTextSize() on the MapControl instance
Fixed issue with location source being stuck
Fixed HTML routing instructions to align with iOS
Fixed time zone related issue causing crashes on Android <7
Added method to acquire Live Data-style badged icons on MapsIndoors object (getBadgedAvailabilityIcon())
Added option to set a list of types or locations to search for, when using MPFilter
Fixed a crash happening when targeting API level 30 and running on an Android 11 device.
Address fields to Building
Added pink as the new standard selection highlighting color (to help visually impaired users)
Various bugfixes
Support for booking
Made LiveData interfaces more intuitive and simpler.
Minor bugfixes and improvements
Support for offline datasets via the DataSetManager
Rewrite of the internal networking layer, resulting in faster and more reliable networking
Rewrite of the internal file handling, improving file system usage and speed
Minor improvements
Support for rendering polygons (i.e. Areas) through DisplayRules
Various bugfixes
Various bugfixes
Fixed an issue that could cause an IndexOutOfBoundsException if data got corrupted.
Issue causing MPApiKeyValidatorService to always return true, no matter the validity.
Fixed an issue that caused the FloorSelector to occasionally show outside the selected venue.
Fixed an issue that caused selections to be shown across floors.
An issue that occationally caused a crash when switching between travel modes in offline routing
Changed the getField() method in MPLocation to be case insensitive
Selection of default Floor when panning between Buildings
Locations disappear after applying Category Filter
Fixed an issue in the Floor Selector that prevented it from hiding in some cases
Feature: Ability to override a Location's display rule at runtime (in v2 this was achieved by using Location.setType( type )
):
MapControl.setDisplayRule( displayRule, location | locations )
: Sets a display rule on the given Location(s) that overrides the current ones being used.
MapControl.setDisplayRule( displayRuleName, location | locations )
: Sets display rule (by its type - name) on the given Location(s) that overrides the current ones being used.
MapControl.getDisplayRule( location )
: Retrieves the current display rule being used by the given Location.
MapControl.resetDisplayRule( location | locations )
: Removes the override display rule on the given Location(s).
MPFilter.Builder.setIgnoreLocationActiveStatus( ignoreActiveToFromStatus )
: Makes queries return Location that are marked as inactive using the "active from"/"active to" mechanism.
MPApiKeyValidatorService
: added a couple of new methods:
checkAPIKeyValidity( apiKey, listener )
: Checks the validity of the given MapsIndoors API key. The SDK doesn't need to be initialized in order to call this method.
validateAPIKeyStringFormat( apiKey )
: Checks that the given API key string format is a valid one. This method only checks the string format.
Feature: RoomId
has been replaced by ExternalId
. The following methods have been added:
MPLocation.getExternalId()
: Retrieves the externalId
property, if available. Should be used instead of the now deprecated MPLocation.getRoomId()
.
MPLocation.Builder.setExternalId( externalId )
: Sets a custom externalId
(a db item id, etc.). This replaces MPLocation.Builder.setRoomId( roomId )
.
Building.getExternalId()
and Venue.getExternalId()
MPFilter.Builder.setIgnoreSearchableStatus( ignoreSearchableStatus )
: Use MPFilter.Builder.setIgnoreLocationSearchableStatus( ignoreSearchableStatus )
instead.
MPLocation.getRoomId()
: Use MPLocation.getExternalId()
instead.
MPLocation.Builder.setRoomId( roomId )
: Use MPLocation.Builder.setExternalId( externalId )
instead
Populate the right floor index for venues, buildings, floors search results locations.
Fix "Software rendering doesn't support hardware bitmaps" crash.
Fix default floor selector crash
Fix icons loading failure for icons hosted in firebase storage.
Support of searchable and activity bits for locations.
Default floor on buildings:
Building.getDefaultFloor()
: Returns a building's default Floor
, if any has been set from the CMS.
Building.getDefaultFloorIndex()
: Returns a building's default floor index, if any has been set from the CMS. It will return Floor.NO_FLOOR_INDEX
if the default floor is not available (Building.getDefaultFloor() == null
).
Building.getFloorMap()
: Returns a list of floor indices and localized names for the given building.
Custom fields, exposed in the following classes: Venue
, Building
, MPLocation
, Category
, POIType
. If available, they can be retrieved by using getField( fieldName )
.
The following methods are available in MPLocation
:
getStatus()
: Returns a status bitfield. For more info, please check the above link.
isActive()
: If an element is not active, it will not be given to the apps.
isSearchable()
: If an element is not searchable it might be shown on the map, but is not show up in searches.
Better Display Rule icon and label visibility control by using:
DisplayRule.getIconVisible()
DisplayRule.getLabelVisible()
LocationDisplayRule.Builder.setShowIcon( show )
LocationDisplayRule.Builder.setShowLabel( show )
New Floor selector:
Use the new interface (FloorSelectorInterface
) to create a custom floor selector.
Turn on/off the floor selector (default or custom) using MapControl.enableFloorSelector( enable )
.
Query the its current status with MapControl.isFloorSelectorEnabled()
.
New displaySearchResults
overloads in MapControl
:
displaySearchResults( inputLocations, animateCamera, cameraPadding, readyListener )
.
displaySearchResults( inputLocations, animateCamera, cameraPadding, showInfoWindow, googleMapCameraUpdate, durationMs, googleMapCancelableCallback, readyListener )
.
SolutionInfo.hasLanguage( language )
(usage: MapsIndoors.getSolutionInfo().hasLanguage( language )
): Check if the given language is available in the current dataset.
MPMapsIndoorsLocationSource.updateLocations( updatedLocations )
: Used to signal an update on the given MPLocation
objects if the case the default Location Data Source is extended.
New methods in the Building
class:
getFloorCount()
: Current building total floor count.
getFloorMap()
: A HashMap containing floor index (key), floor name (value) pairs. Note that the floor name is localized.
New shortcut methods in MPLocation
to query for its geometry type: isLocationOfTypePOI()
, isLocationOfTypeRoom()
, etc.
MapControl.setFloorSelector( floorSelector )
: It takes now a FloorSelectorInterface
instead of a IFloorSelector
.
dbglog.useDebug()
: Use dbglog.enableDeveloperMode( enable )
or dbglog.enableDeveloperMode( enable, customTagPrefix )
.
dbglog.isDebugMode()
: Use dbglog.isDeveloperMode()
.
MapControl.setFloorSelectorType( FloorSelectorType )
: The new interface only provides Building data for the current visible in the Map View (or the closest to the camera target).
General bug fixing.
Stabilizing many behaviours of the SDK.
Fixed some issues related to the deinitialization of MapControl and MapsIndoors (class)
Support for runtime (indoor tiles) map-style switching. Related methods added:
Venue.getMapStyles()
: Gets a list of available map styles. Note that all venues share the map styles
Venue.getDefaultMapStyle()
: Gets the default map style used by the SDK.
Venue.isMapStyleValid( MapStyle )
: Checks the validity of the given map style
MapControl.getMapStyles()
: Gets a list of available map styles. Note that all venues share the map styles
MapControl.getMapStyle()
: Gets the current map style set with MapControl.setMapStyle( MapStyle )
MapControl.setMapStyle( MapStyle )
: Sets the given map style as the current one. It can be invoked before or after MapControl.init()
Ability to change a Display Rule visibility at runtime. Related methods:
MapControl.getDisplayRules()
: Returns the aggregated display rules
MapControl.getDisplayRule( type )
: Returns the display rule with the given name, if any found
LocationDisplayRule.setVisible( show )
: Sets this Location Display Rule to be visible (based on the zoom on/off values) or not (marker icon not shown)
MPLocation now exposes its Geometry by using:
MPLocation.getGeometry()
: Retrieves the Geometry of an MPLocation (Point, PolygonGeometry, etc.)
MPLocation.getGeometryType()
: Returns the Geometry type as a in integer value (Geometry.TYPE_POINT, (Geometry.TYPE_POLYGON, etc.)
MPLocation.setGeometry( polygonGeometry )
: Sets the given PolygonGeometry as a location's Geometry
MPLocation.setLocationType( locationType )
: Sets the location's type (poi, area, or room)
Location data status listener:
In version 3, POI data (Locations) loading is not in sync with other data such as buildings, venues, etc. Both MapsIndoors.synchronizeContent()
and MapControl.init()
callbacks will be invoked once all but Location data is ready to consume. We've added an separate method that sets a listener for Location data only (MapsIndoors.addLocationSourceOnStatusChangedListener()
).
Clustering:
MapControl.setLocationClusteringEnabled( enable )
can be only invoked BEFORE MapControl.init()
; doing so afterwards will throw an exception (if dbglog.useDebug()
is set to true
)
Updated the network layer so in case of network errors, will serve cached data when/where possible
Venue.getStyles()
: Use Venue.getMapStyles()
instead
Venue.getDefaultStyle()
: Use Venue.getDefaultMapStyle()
instead
Better handling of broken custom/advanced icon links.
Support for Live Data added. Information and documentation about this new feature is available at
Status data. For detailed info, please refer to the in our Integration API documentation.