The 100.0.0 version of ArcGIS Runtime SDK for Android is the next generation of ArcGIS Runtime.
This major release introduces new and purposefully redesigned APIs from previous releases. This topic describes what's new, what's changed, and known limitations in this release.
The 100.0 release is the first release in the Quartz family. The Quartz code name reflects the next generation of ArcGIS Runtime, built from the ground up using a new architecture. This has enabled new capabilities and performance optimizations and provides API and functional consistency across all of the Runtime SDKs. The entire API was re-imagined to incorporate these new capabilities and best-of-breed ideas from all of the ArcGIS Runtime SDKs.
Below are details of what's new and changed in this release.
This release of the ArcGIS Runtime puts the map at the heart of the API to allow developers to quickly leverage the ArcGIS platforms Web GIS capabilities. The following additions highlight the benefits of the new ArcGIS Runtime release.
The Map object has been split out from the view that displays it, to represent a model component from a Model-View-Controller architecture. This important object at the heart of the ArcGIS Runtime has an API that follows the ArcGIS Web GIS information model. It contains operational layers, basemaps, bookmarks, popups and other ArcGIS specific data to enable these to be leveraged in your apps. It also includes convenient APIs to instantiate it from URLs, portal items or default basemaps so you can get great maps working quickly.
Version 2.0 of web maps and higher are supported (web maps from Portal for ArcGIS 10.3 and above); pre-2.0 versions are no longer supported.
GeoViews (MapView and SceneView) are solely responsible for display and interaction, separating concerns from the model objects and allowing the APIs to be simplified and harmonized between the 2D and 3D worlds. The Views contain Graphic Overlays, as well as operations to easily identify features and graphics without having to write any layer type specific code.
To make things easy for you, the APIs for common operations such as editing, searching, geocoding or routing are the same whether you are online or offline.
- Mobile map packages — Offline maps with great symbology, place search and directions can be packaged with ArcGIS Pro, side loaded onto your device and used in the Runtime through Mobile Map Packages. A mobile map package is a set of items bundled together for transport, often for use in offline workflows. The items are one or more maps, their associated layers and data, and optionally networks and locators. A mobile map package also includes metadata about the package.
- Offline services — You can also take your connected ArcGIS based feature and tiled layers offline line on demand with dedicated Tasks and associated Jobs. The GeodatabaseSyncTask works with ArcGIS feature services to take features offline in a mobile geodatabase (.geodatabase file) and allow them to be edited and synced. The ExportTileCacheTask extracts tiles from a tiled ArcGIS map service as a tile package (.tpk file) and allows them to be viewed offline.
For more information, see the "Create an offline map" topic in this guide.
Vector tiled layers
You can use vector tiled layers in your ArcGIS Runtime app. These layers are similar to raster-based tiled layers but they are faster, smaller, and look better on high resolution devices. They also differ in the way cartography is delivered. Instead of raster pixels, vector tiled layers deliver cartography using vectors so cartography is rendered at runtime leveraging all the available pixels on the device. The file format is binary and conforms to the Mapbox vector tile specification. Vector tiled layers don't contain any feature data and they don't support identify or search operations. For details, see the API reference for ArcGISVectorTiledLayer or see the "Tiled layers" section in the "Layers" topic in this guide.
Graphics as overlays
Graphics have always been used to display temporary application data on top of a map. To formalize this usage, graphics are now added to GeoViews (MapView or SceneView) as overlays. This ensures that graphics are always displayed on top, even when map layers are reordered. This also makes it convenient to switch out maps while still keeping the graphics in place. For more information, see the "Add graphics overlays to your app" topic in this guide. It is now also possible to identify graphics overlays in a map view via a single convenient method.
Raster (in beta)
This capability is Beta for deploying on mobile platforms.
You can now add raster data on desktop devices from many popular raster file formats such as DTED (Digital Terrain Elevation Data), GeoTIFF, RPF (Raster Product Format), NITF (National Imagery Transmission Format), HRE (High Resolution Elevation), Erdas Imagine, etc.
World files are no longer required to display GeoTiff and NITF formats.
Change the visualization of raster data by computing hillshades, applying colormaps, or stretching the statistical distribution of pixel values.
New layer names
Other changes have been made to layer names: Use ArcGIS map image layers for adding ArcGIS Server map services. Use ArcGIS tiled layers for adding ArcGIS Server tiled map services and tile packages. Use a Feature layer with associated Feature Tables for adding layers or tables from ArcGIS feature services and geodatabases (including non-spatial tables). See the "Layers" topic in this guide for information on the supported layer types.
Web map pop-ups
Web map pop-ups allow you to customize how the data in your layers are presented to users. A new full popup API has been added to allow you to tap into the their configuration and build great user experiences for your users which include feature editing. Those layers which allow popup definitions implement the new PopupSource interface. The map view also provides coarse-grained methods to identify pop-ups taking into consideration different types of layers, their visibility, scale range, and pop-up configuration, and so on, and returns a list of pop-ups for features at a given location.
Version 2.0 of web maps and higher are supported (web maps from Portal for ArcGIS 10.3 and above); pre-2.0 versions are no longer supported.
The mapping API seamlessly integrates with the portal API, allowing you to access portal content and use them as maps. You can also edit existing maps or author completely new maps and save them back to the portal, which can then be used elsewhere in the ArcGIS system. For details see the "Access portal content" topic in this guide.
Resources, such as maps, layers, tasks etc, that load metadata asynchronously to initialize their state adopt the loadable pattern. This pattern makes the behavior of loading state more consistent and uniform, and also makes its asynchronous nature more explicit. Loadable resources do not automatically load their state. They load lazily, when asked either by the developer, or by other objects that depend on it. The status of a loadable resource can be easily monitored to determine if it is loading, loaded successfully, or failed to load, and you can retry loading it if it failed to load. For more information, refer to the loadable pattern topic in this guide.
Features retrieved from ArcGISFeatureTable have been optimized to contain only a minimum set of attributes which are required to render them on a map. To get the full list of attributes, the feature has to be explicitly loaded. This optimization reduces latency and bandwidth consumption while displaying features, but still allows you get the feature's complete data if you want to edit or display feature details. When editing features, they must be loaded first.
Centralized handling of authentication
All security and authentication related aspects are managed by a newAuthenticationManager class which helps to unify and centralize how authentication is performed regardless of the security mechanism being used or the operation being performed. The authentication manager issues an authentication challenge whenever security related events are encountered. Developers can monitor these challenges and respond with credentials to get access to secured resources, or allow the authentication manager to prompt the end user for credentials. For more information, refer to the API reference documentation for AuthenticationManager
Geometries and geometry builders
The fundamental geometry objects remain the same - point, multipoint, polyline, and polygon but they are immutable and cannot be modified once they are created. The constructors on geometry objects allow them to be created easily in one shot if their coordinates are known, but you can also use geometry builders to progressively construct new geometries, either from scratch or by using an existing geometry as the starting point and then manipulating its coordinates. For more information see the "Edit geometries" topic in this guide.
It's now easier to determine where errors occur in the stack so you can provide better error messages to your users. A new standardized error domain property is available, which indicates if the error occurred client-side within the ArcGIS Runtime or server-side from an ArcGIS Server service or web service. A consistent error code property can be used to further diagnose what the error was and what error message should be displayed to the user. A listing of error code descriptions is provided in the "Platform error codes" topic in this guide.
New async pattern
A brand new consistent asynchronous pattern has been developed, extending the familiar Future java pattern with an interface called ListenableFuture. This new API allows you to add as many listeners as required to know when the method is complete.
Other new items
- A new location display implementation which allows custom data sources.
- A new way of configuring network requests using the request configuration class.
- New interface for objects which can be serialized to and from json called JsonSerializable
- The introduction of listenable lists which allow you to be notified when items change.
Issues fixed from earlier Runtime versions
- ENH-000098709 When loading the map in Android, allow the android runtime the ability to resume the loading automatically when network connection is lost
- BUG-000097470 Having two transparent map service layers in a map view only allows one of them to be shown at a time on Android 6.0 devices
- BUG-000097661 Callouts are flickering in the Android SDK when they are moved to a new location
- ENH-000087304 Symbology from MapService and FeatureService should have same sizes rendered on Mapview.
- ENH-000094002 NAVIGATION AutoPanMode should keep activated when speed is 0.
- BUG-000093433 Adding a z-value point to a z-value enabled feature service results in a table exception, which the shape must not have a Z value.
- ENH-000088172 Have the ability to perform the cut operation in an offline mode.
- ENH-000081456 The Symbols with ArcGIS Runtime SDK for Android for ArcGISDynamicMapServices are displayed larger than those displayed in ArcMap and applications build using Web APIs.
- NIM082528: image rendered has different size than ImageView if initialized using the same drawable.
- NIM103325 Add 'forStorage' parameter to 'find' and 'reverseGeocode' methods in the Locator class of ArcGIS Runtime SDK for Android.
- NIM103285: mapExtentChanged method needed in ArcGIS Runtime for Android—the 100.0 release of the Runtime includes the ability to add a listener to the map view that will be called when the visible area changes (MapView.addVisibleAreaChangedListener).
- NIM093425: Support disablePan on MapView—in the 100.0 release of the Runtime you can set the MapOnTouchListener on the map view, allowing complete control over the gestures that perform interactive navigation.
- Deadlocks may occur if a map is destructed while it has outgoing requests.
- In some cases, wrap-around does not stay enabled.
- Map zooms in and out (5-10%) when dragged between monitors with different DPI
- Some specialized layers are not supported in this release: KML, WMS, WMTS, OpenStreetMap, Bing, CSV by reference and GeoRSS.
- Maps do not open consistently at exactly the same initial extent.
- Map view grid lines close to the date line and poles may not display.
- MapView doesn't zoom to geometry if the supplied geometry's envelope has zero height or width.
- Cloning/copying an unloaded map does not render in a map view.
- Quickly opening a mobilemap and then destroying the mapview may cause a crash
- A web map won't open when a feature layer's type ID is not an integer.
- Pop-up title does not use name when its defined with a coded value domain field.
- There's an inconsistency in handling null values in JsonSerializable UnknownJson.
- Map does not display any features for FeatureLayer with date-based definition expression using the timestamp keyword.
- Vector tiled layers (ArcGISVectorTiledLayer)
- DrawStatus does not complete when zoomed out to lowest level of detail (LOD) and no labels are displayed
- Vector tile symbols don't scale consistently with DPI
- Vector tiled layers created from a URL don't have attribution
- Crash may occur on Android when zooming and panning with vector tiled layers.
- A vector tiled layer may crash if you interact with it before it has begun drawing.
- ArcGISTiledLayer fails to load with cached image service as portal item
- If the URL property under basemap doesn't exist in a layer type unsupported by ArcGIS Runtime, the layer will not get serialized.
- Overrides to definition expressions on sublayers in a map image layer from a portal item are not respected.
Symbols, renderers and graphics
- Points are not drawn on a graphics overlay if they're on the dateline.
- If min/max scale is changed on graphics overlay before the map is loaded, min/max scale on the map view is locked.
- The LocationDisplay symbol may sometimes behave strangely in navigation mode.
- ClassBreaksRenderer with one class break and no minimum value symbolizes features incorrectly
- Popup.Symbol returns null for features from a map service.
- For GraphicsOverlay, the selection doesn't show for fully transparent symbols.
- When creating a feature collection from an array of graphics, the graphics symbols are not honored.
- For graphics overlays in dynamic mode, a renderer's rotation is used even if the graphic's symbol is overridden.
- Symbol rotation type (arithmetic/geographic) is ignored by graphics.
- Extrusion is applied to symbol in graphics when it should only be applied on symbol in renderer
- Feature layers from federated 10.3 and 10.3.1 ArcGIS Servers cannot use the default advanced symbology setting.
- Features with uncompressed BMP symbols may not display.
- Static graphic overlays render fill symbols with an outline even if it is set to Null. Use a transparent outline instead.
- Large amounts of local feature data delays tiles
- When syncing a large geodatabase, offline features disappear intermittently during map interaction
- Synchronizing large geodatabases with many features and no local edits may take longer than expected.
- ArcGIS Online doesn't support requesting features from feature services in a different spatial reference using the latest WKID value stored in a map
- TextSymbol doesn't honor the screen alignment property.
- Creating a feature with an invalid field name throws an incorrect error (an ownership-based access error)
- Sometimes, when changing zoom levels, there's a drawing delay for symbols for features in a FeatureLayer.
- Raster renderer produces different results between MapView and SceneView
- RasterLayer doesn't free a used raster before the application is shut down.
- To return m and z values from the Submit geoprocessing tasks, you must include the returnZ=true and return=true parameters to the call that fetches the output value of the GeoprocessingFeature.
- Suggestion results from local street address locators cannot be used to retrieve results if they don't contain a house number
- Geodatabase objects may be taken out of scope too soon, so accessing tables once the geodatabase is loaded may fail. It's recommended to keep the geodatabase as a global variable.
- Locator performance may be poor for larger local locator datasets.
- Calling pause on a job that is downloading a file does not pause the job.
- Creating a FeatureCollectionTable from a FeatureQueryResult throws an exception.
- ReturnGeometry set to false is not honored when QueryParameter is passed to PopulateFromServiceAsync
- When a self signed certificate is trusted it is always cached and is not cleared.
- Multiple Authentication Challenges may be fired for concurrent requests.
- MapView.setViewpointGeometryAsync(Geometry, int padding) ignores padding and doesn't zoom to geometry for horizontal lines.
- A cached portal credential may not be used to access a second portal.
- Authentication challenge issued when accessing a certificate secured portal under some workflows.
- The map extent saved to a portal may not be accurate under some circumstances.
- ServiceFeatureTable leaves behind temporary files when application is closed.
- Basemap created by Basemap.copy() doesn't display.
- Map save methods need to load map implicitly if not yet loaded.
- UnsupportedOperationException thrown when calling ArcGISMapServiceInfo.getDocumentInfo().getTextAntiAliasingMode().
- Upper case characters are not supported in Redirect URIs.
- TextSymbol does not honor SCREEN alignment property for feature layers.
- Sync fails with ArcGIS Server 10.3 feature services that have realm applied.
- LocationDisplay symbol may change between navigation and default location symbols while mode remains Navigation Mode if velocity of location update is 0.
- PictureMarkerSymbol offset may be incorrect on some devices
- MapView.getLocationDisplay() may block thread for several seconds.
- NavigationChangedEvent fires multiple times when panning + flick, and will return false for isNavigating even if the map is still moving.
- exportImageAsync() fails to create a valid image on some devices (e.g. Nexus 7)
- PopupManager.isShowAttachments returns incorrect value for features from a map service.
- PopupManager.getFormattedValue() returns null/empty for identify popups from map services 10.4 or earlier.
- Domain and date fields won't be substituted in PopupManager.getCustomHtmlDescription.
- Vector tiled layer using static basemap constructors not loading on some older devices (e.g. Nexus S and ASUS TF300T) due to ssl issue.
- GL context creation is problematic on some devices (e.g. Nexus 7 (2012) and ASUS fonepad 7).
API changes since Beta 3
- LocationDisplay get/set symbol methods now use Symbol, use a Marker or Composite symbol where necessary.
- ArcGISRuntimeEnvironment has a new licensing API.
- Field UNKNOWN of type AntiAliasingMode has been removed.
- ArcGISFeatureLayerInfo is no longer Loadable or a RemoteResource, obtain this class from a service feature table.
- ArcGISFeatureServiceInfo is no longer Loadable or a RemoteResource, obtain this class from a task or geodatabase.
- ArcGISMapServiceInfo is no longer Loadable or a RemoteResource, obtain this class from a map image laye.r
- Field UNKNOWN of type TextAntiAliasingMode has been removed.
- VectorTileSourceInfo is no longer Loadable or a RemoteResource, obtain this from a vector tiled layer.
- com.esri.arcgisruntime.datasource renamed to com.esri.arcgisruntime.data.
- Class from com.esri.arcgisruntime.datasource.arcgis added to com.esri.arcgisruntime.data.
- AngularUnitId field UNKNOWN has been renamed to OTHER.
- AreaUnitId field UNKNOWN has been renamed to OTHER.
- GeodesicDistanceResult renamed to GeodeticDistanceResult.
- GeometryEngine.distanceGeodesic and GeometryEngine.moveGeodesic renamed to use Geodetic.
- Field UNKNOWN of type GeodeticCurveType has been removed.
- Field UNKNOWN of type GeometryBuilderType has been removed.
- LinearUnitId Field UNKNOWN has been renamed to OTHER.
- ImageTiledLayer.RenderMode has been removed, not needed with new symbol size and scale logic of map view.
- VisibilityChangedEvent and VisibilityChangedListener removed from ArcGISSublayer.
- BackgroundGrid moved to com.esri.arcgisruntime.mapping.view package.
- Field UNKNOWN of type Basemap.Type has been removed.
- TimeExtent has been removed, time not supported in this release.
- Bookmark.get/setTimeExtent removed.
- GeoView.get/setTimeExtent removed.
- LayerTimeInfo.getTimeExtent removed.
- Field UNKNOWN of type Viewpoint.Type has been removed.
- MobileBasemapLayer moved to com.esri.arcgisruntime.layers package.
- MobileMapPackage moved to com.esri.arcgisruntime.mapping package.
- GeometryBuilderRequiredEvent and GeometryBuilderRequiredListener removed.
- AdjustForWrapAround has been removed.
- MapView.locationToScreen no longer takes the AdjustForWrapAround parameter.
- IdentifyPopupResult removed, IdentifyLayerResult now contains popups.
- GeoView identify methods changed to include new returnPopupsOnly only parameter.
- IdentifyLayerResult getIdentifiedElements renamed getElements.
- ImageLayerGeoElement removed, instances of Feature now returned from map image layer identify operations.
- Field UNKNOWN of type LayerViewStatus has been removed.
- NavigationCompletedEvent removed, use NavigationChangedEvent.
- NavigationCompletedListener removed, use NavigationChangedListener.
- PortalAccess and PortalGroupMembership removed, use PortalInfo.Access, PortalUser.Access, PortalItem.Access and PortalGroup.Access.
- PortalItemContentParams renamed to PortalItemContentParameters.
- PortalItemType renamed to PortalItem.Type.
- PortalMode renamed Portal.Mode.
- PortalQueryParams renamed PortalQueryParameters.
- PortalQueryParams.SortOrder renamed to PortalQueryParameters.SortOrder.
- PortalUserRole renamed to PortalUser.Role.
- CimSymbol, CimLineSymbol, CimPointSymbol, CimPolygonSymbol removed, Symbol instance now returned for advanced symbols (default symbols).
- Field UNKNOWN of type ClassBreaksRenderer.NormalizationType has been removed.
- Field UNKNOWN of type MarkerSymbol.AngleAlignment has been removed.
- Field UNKNOWN of type RotationType has been removed.
- Field UNKNOWN of type TextSymbol.FontDecoration has been removed.
- Field UNKNOWN of type TextSymbol.FontStyle has been removed.
- Field UNKNOWN of type TextSymbol.FontWeight has been removed.
- Field UNKNOWN of type TextSymbol.HorizontalAlignment has been removed.
- Field UNKNOWN of type TextSymbol.VerticalAlignment has been removed.
- com.esri.arcgisruntime.tasks.route renamed com.esri.arcgisruntime.tasks.networkanalysis.
- ExportTileCacheSizeEstimate renamed ExportTileCacheSizeResult.
- ArcGISFeature.addAttachmentAsync and updateAttachmentAsync now use a byte rather than File
- ArcGISMap.save and saveAs methods have a new property called forceSaveToSupportedVersion for opting in to saving maps which may lose unknown json and layers which cannot be saved.
- CodedValueDomain.getCodedValues now returns CodedValue rather than Map<Object, String>.
- Envelope.getDepth removed.
- EnvelopeBuilder.getDepth removed.
- ExportTileCacheTask is now loadable, constructor only takes a URL and some methods now async.
- FeatureLayer get/setSelectionWidth now uses double not in.
- GeodatabaseSyncTask is now loadable, constructor only takes a URL and some methods are async.
- GeodatabaseSyncTask.createDefaultGenerateGeodatabaseParametersAsync now takes an extent.
- Geometry.isSimple removed, use GeometryEngine.isSimple instead.
- GeoView.is/setLogoVisible renamed to is/setAttributionTextVisible.
- ImageTiledLayer.isResampling removed, no replacement, see known issues.
- Item class properties now use a calendar rather than int. Also spatial reference now returns a string and getId is renamed to getItemId.
- Job.getJobId renamed getServerJobId.
- Layer class removed addVisibilityChangedListener, getAttributionText renamed getAttribution, getId now returns a string.
- LayerTimeInfo.getTimeExtent removed.
- LocatorInfo.isSupportsPointAddress renamed isSupportsAddress.
- various MapView setViewpoint methods have been renamed as overloads.
- MapView getUnitsPerPixel renamed to getUnitsPerDensityIndependentPixel.
- Job.Message.getType removed.
- PictureMarkerSymbol.getBitmapDrawable removed, use getImage.
- Popup class no longer takes a context. Various methods removed, use PopupManager.
- PopupAttachment.setAttachment removed, use PopupAttachmentManager.
- PopupDefinition getMedias renamed getMedia, is/setAllowUpdateGeometry renamed to is/setAllowEditGeometry.
- PopupManager getEditingGeometryBuilder removed, isAllowUpdateGeometry renamed to isAllowEditGeometry, isShowEditInfoSummary renamed to isShowEditSummary.
- PortalFolder getCreated now returns a calendar, getId renamed getFolderId, getUserName renamed getUsername.
- PortalGroup fetchGroupMembershipAsync renamed to fetchGroupUsersAsync, getCreated and getModified now return a calendar, getId renamed getGroupId, getPhoneNumber renamed getPhone, getSortOrder and getSortField now return enums (not strings).
- PortalInfo getCreated and getModified now return a calendar, getDefaultExtent now returns an envelope.
- PortlalItem getAvgRating renamed getAverageRating, get/setLicenseInfo renamed get/setAccessAndUseConstraintsHtml, getNumComments renamed getCommentCount, getNumRatings renamed getRatingsCount, getNumViews renamed getViewCount, getOwnerFolderId renamed getOwner, getSize now returns a long, unshareWithGroupsAsync renamed unshareAsync.
- PortalItemComment getCreated now returns a calendar, getId renamed getCommentId.
- PortalItemContentParams renamed PortalItemContentParameters.
- PortalItemGroups getAdminGroups renamed getAdmins, getMemberGroups renamed getMembers, getOtherGroups renamed getOthers.
- PortalUser getCreated and getModified now return a calendar, getDescription renamed getUserDescription, getUserName renamed getUsername.
- PortalUserContent getUserName renamed getUsername.
- QueryFeatureOptions class renamed ServiceFeatureTable QueryFeatureFields.
- TextSymbol size is now a float (not int)
- TileInfo constructor has reordered parameters