This topic describes the changes in version 10.2.4 of the ArcGIS Runtime SDK for Android.
If you are using Eclipse or ADT as your development environment you can use the Upgrade ArcGIS projects tool, provided with the SDK, to update your ArcGIS projects to the latest installed version.
Minimum Android API level support
At this release, we have updated the minimum supported Android platform version to Android platform version 4.0.1 (API level 14).
Direct local support for vector and raster formats
Local shapefiles, KML files, and geopackages are now supported for map display. Feature layers can now display data from a ShapefileFeatureTable, itself created from the path to a shapefile (.shp) on the local machine. Feature data from a GeoPackage, an Open Geospatial Consortium data format, can also be displayed in a feature layer, after first creating a GeopackageFeatureTable. The KMLLayer class in com.esri.android.map.ogc.kml supports the ability to work with local and remote (via a URL) KML files.
You can also now display local raster data files. Refer to the com.esri.core.raster package, and the RasterLayer class in the com.esri.android.map package for more information. Supported formats are:
- DTED0, 1, 2
- SRTM1, 2
Rasters stored in Geodatabases are not supported
Spatial analysis functions (BETA)
New local spatial analysis functions are available in beta in this release, using fast GPU-based processing. Available functions are:
- Line of sight
Refer to the new com.esri.core.analysis package for more information.
Spatial analysis is not currently usable on x86 devices.
Geodatabase feature service table
At this release we have continued to improved the API support for applications that can work both online and offline using a single API, using the GeodatabaseFeatureServiceTable.
The GeodatabaseFeatureServiceTable class now supports:
- Editor tracking functionality
- Creating a GeodatabaseFeatureServiceTable from a nonspatial table (as opposed to a spatial layer) from a service
- Performing related table queries
The GeodatabaseFeatureServiceTable currently does not support time-aware data.
For more information, see the Layer types topic.
WMTS services are now supported, by using the new WMTSLayer class.
Web map enhancements
Support for web maps with image service layers, and WMTS services.
Offline API quality improvements
A number of quality improvements have been made to APIs involving offline data.
Map behavior and performance improvements
A new zoom gesture on the MapView is available, double-tap-and-drag. By default, this gesture is used for single-pointer zooming. A double-tap gesture followed by an upwards vertical drag gesture zooms the map in; double-tap followed by downwards vertical drag gesture zooms out. Note that the pointer must not be released after the second tap of the double-tap; the pointer should remain on the surface from the second tap, while performing the zoom in and/or out. This gesture can be overridden—see the API additions section below for information about the API additions for this gesture. The speed of the zoom effect is determined by the distance the pointer has moved from the original tap event. Only vertical movement is considered; horizontal movement is ignored.
A number of performance improvements have been made to various areas of the API, including increasing the speed of map animations to be consistent with other APIs and improving the performance of some specific cases of panning the map interactively.
See also the new setBufferEnabled method described in the API Additions section.
- By default the size of the callout window will stretch to accommodate the content that is to appear inside it, potentially becoming almost as large as the entire MapView. The maximum width and height are now customizable using either absolute pixels or density-independent pixels.
- The maximum width/height of the callout window is now passed down to the content views inside the callout, to help these views size themselves correctly, improving the display of more complex callout content.
- Improved behavior of animated show/hide and floating anchor.
API breaking changes
- AttachmentManager.retrieveAttachmentInfos behavioral change: The attachmentListener now calls back on worker thread while previously called back on UI thread.
- Added MapOnTouchListener.onLongPressUp event. This simplifies the magnifier workflow so that users only need to override this event in order to get notified when the magnifier is released.
- Added onDoubleTapDrag and onDoubleTapDragUp events to the MapOnTouchListener; .
- Added UserCredentials.clearCachedCredentials(String url) method. This is useful because the Apache HttpClient will cache credentials for HTTP based security types (basic, digest, ntlm, iwa), there were some issues where someone would sign out and then go to sign in as someone else, but they were already authenticated with the cached credentials. This method provides a way to clear any cached credentials for a given URL.
- Added a new MapView constructor to support offline basemaps. This is to allow basemap switching for a Webmap (online or offline) and use a TPK as the basemap.
- Added new MapView.switchBasemap method.
- Added async methods createPopupInfo, fetchPopupInfo, and fetchLayerServiceInfo to ArcGISTiledMapServiceLayer and ArcGISDynamicMapServiceLayer. Also added simple getter for getLayerServiceInfo to the ArcGISDynamicMapServiceLayer.
- Added get/setDefinitionExpression methods on a FeatureLayer to filter out features to be displayed.
- Callout class: added new methods to get/set the maximum width/height of callouts and callout offsets using density-independent pixels. Also added setPassTouchEventsToMapView and isPassTouchEventsToMapView methods to control how events are propogated to child views. The CalloutStyle class also gains new methods to get/set maximum width/height and corner curve size using density-independent pixels.
- Added methods getTimeExtent, getTimeInfo, getTimeInterval and isTimeAware to ArcGISImageServiceLayer to support time-aware scenarios.
- New setBufferEnabled method onTiledLayer allows the ability to turn off buffering extra band of tiles being fetched outside the MapView (in case of multiple tiled services). This results in faster rendering.
- Added the new package com.esri.android.map.ogc.kml containing the KMLLayer class, for working with both remote and local KML files.
- The MapGestureDetector class and OnGestureListener interface have been deprecated since they are intended for internal use only; use the MapOnTouchListener or other listeners in the com.esri.android.map.event package instead.
- Deprecated the synchronous createPopupInfo and getPopupInfo in ArcGISTiledMapServiceLayer and ArcGISDynamicMapServiceLayer; use the alternative methods with callback parameters instead.
- Deprecated the fetchLayerInfo method on the ArcGISPopupInfo class; refer to the new alternative methods on the ArcGISTiledMapServiceLayer and ArcGISDynamicMapServiceLayer classes instead.
- Deprecated CalloutPopupWindow in favor of Callout (which has been enhanced as described in the section above).
- Deprecated the get and set methods for title text attributes in CalloutStyle (for example, get/setTitleTextColor), as callout titles were removed in a previous release.
- Deprecated the KMLLayer class in the com.esri.android.map.ogc package; this is superseded by the new KMLLayer class in the com.esri.android.map.ogc.kml package.
New and updated in the SDK
The SDK includes a number of new samples (GeoJSONEarthquakeMap, ClassBreaksRenderer, UniqueValueRenderer, and DynamicLayerRenderer).
All samples have been updated to use minimum SDK version number 15, and many of the samples have also been updated to use a new fragment-based architecture, more modern user interface elements, and to demonstrate current best practices and address bugs.
There are also new guide documentation topics giving guidance on understanding and using spatial references.
- NIM102062: Local tiled layers are not completely rendered in full extent on a Panasonic ToughPad FZ-A1 device.
- NIM104756: Basemap does not always load after performing geocoding or routing.
- NIM102514: The OnDragPointerUp event listener does not get fired consistently.
- NIM104263: When editing a hosted feature service in a web map an "Update failed" error occurs when using cellular service and leaving the Collector for ArcGIS application idling in between edits.
- NIM102260: Collector for ArcGIS (Android) incorrectly rounds off the values in double field.
- When using a FeatureServiceTable, you can edit related records, but relationships between records cannot be edited, created, or deleted.
- It is not possible to use Ownership Based Access Control (OBAC) functionality with a disconnected geodatabase created from an ArcGIS Server version earlier than 10.3. Workaround: Use ArcGIS for Server 10.3.
- Geopackage vector feature tables that have a geometry type defined as Geometry or Geometry Collection cannot be read, displayed, or edited.
- Each individual raster file used in a raster layer is limited in size to 4GB; this is a current limitation of the Android platform.
- Callouts that contain WebViews as content, and that are displayed using Callout.animatedShow() or Callout.animatedHide(), may display content poorly—content may appear fuzzy, and callout may flash at end of hide animation. Workaround is to use non-animated alternatives, Callout.hide() and Callout.show(), if affected.
- FeatureServiceTable does not support time-awareness.
- Advanced Symbology doesn't support MIL-2525C and APP 6B dictionaries installed on same device. Workaround this issue by setting the path of one of the resources explicitly, using the MessageProcessor constructor that allows you to set the symbol dictionary path.
- New feature services created from ArcMap from feature classes that have names containing SQL keywords like "desc" and "asc" may cause initialization to fail if used in a GeodatabaseFeatureServiceTable. Workaround is to change feature class names to non-reserved words.
- CalloutPopupWindow may display incorrectly if style with corner curve value of 0 is used.
- When not using a full screen view for the OAuthView, enterprise logins may not work properly if the organization has several redirect pages.
- Drawable.createFromStream() throws NetworkOnMainThreadException while constructing PictureMarkerSymbol from a URL.
- OutOfMemoryError exception thrown while trying to upload a large attachment(~60 MB) to server during sync.
- Geodatabases need to be synced and edited from the same thread, otherwise edits will not be visible.
- Services with a casing mismatch between the field names used in the 'editFieldsInfo' and 'fields' JSON attributes (defined in the service REST endpoint) may not honor editor tracking.
- Rendering fails for layers with class breaks renderer when the class breaks field is SHAPE.AREA or SHAPE.LEN.
- Failure to load webmaps with basemaps that have popups defined.
- WebMap which contains ArcGIS Server .NET 10.1 secured services never loads, and WebMapLayer which should be skipped is not skipped.
- When a Popup has multiple media and one image has invalid URL and a valid URL is linked to this image , tapping on this image in full screen mode won't open the linked page.
- If there are more than one reference layer in a basemap they don't all get shown.
- Popup Pie chart can't be created if one of the values is negative.
- Selection mode 'subtract' does not work correctly when using ArcGISFeatureLayer in snapshot mode.
- The onWebMapLayerAdd event won't be triggered when a feature collection is added to a webmap.
- Unique value renderer does not support field2.
- Chinese characters won't work in text symbol.