ArcGIS Runtime SDK for Android - Recent...

57
ArcGIS Runtime SDK for Android Building Apps Dan O’Neill Rama Chintapalli

Transcript of ArcGIS Runtime SDK for Android - Recent...

Page 1: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

ArcGIS Runtime SDK for Android

Building Apps

Dan O’NeillRama Chintapalli

Page 2: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Agenda

• Introduction

• Developer Patterns

• Maps & Layers

• Geometry & Graphics

• Portal & Authentication

• Offline

• Geocoding and Routing

Page 3: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

ArcGIS Android SDK

Introduction

Page 4: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Getting startedIn 5 minutes

Page 5: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Getting started with the SDK

1. Sign up for free Developers testing account

- 50 credits a month, premium content, register apps, test

tokens

2. Install Android Studio IDE

- https://developer.android.com/studio

3. Get dependencies automatically with Gradle and try it out

- Write an app!

Page 6: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

New developers - Follow first map app

tutorial• Developers site > Android > Guide

- http://developers.arcgis.com/android/latest/guide

- Help topics

• Getting started > Develop your first map app

• Step-by-step guide

Page 7: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Existing developers - fork samples or example apps

• API samples

• Example apps

- Maps App

- Nearby

- Ecological Marine Units

GitHub Workflow• Fork

- The repo to have a local mirror of the repo

• Extending for your own use

- Use as a starting point to add specific features for your org

• Extend to contribute

- Create pull requests against your upstream to have your

contributions reviewed by the Example Apps team.https://esri.github.io/#Android

Page 8: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Gradle: Add AAR dependency

• Maven repository hosted by Bintray

- AARs, Version history

• Project build.gradle

repositories {

maven {

url 'https://esri.bintray.com/arcgis'

}

• App module build.gradle

dependencies {

compile 'com.esri.arcgisruntime:arcgis-android:100.0.0'

}

Page 9: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

SDK resources• Developers site - http://developers.arcgis.com/android

- Doc – guide, API Reference

- Downloadable SDK

- Application support

• GitHub

- Samples - http://github.com/Esri/arcgis-runtime-samples-android

- Example apps

• GeoNet user community

- http://geonet.esri.com/community/developers/native-app-developers/arcgis-runtime-sdk-for-android

Stack Exchange #arcgis-android

Page 10: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Features

• Build apps for Android devices

• Visualize geographic data – maps, layers, graphics

- feature, dynamic, tiled, raster, …

• Identify features, query data, and display info pop-ups

• Share maps and content across ArcGIS platform

• Offline maps, data, routing, geocoding

• Powerful analysis and local geometric operations

• Loadable resources

• Async APIs using ListenableFutures

Page 11: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Dan

Developer Patterns

Page 12: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Loadable

• A pattern for classes that asynchronously load data

- Service calls, disk I/O, data processing…

- Layers, Map, Portal Items, Geodatabase, Tile Cache, Features etc

• Formalizes, enhances, and improves upon concepts that we had

before

- Provides a generic API across different types of classes

Loading

Failed To

LoadLoaded

Not

Loaded

Page 13: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Loadable pattern

• Loadable is async

- Specific pattern for load errors

- Has additional states

- Can reload if failed

- Supports chaining of loading

- Uses listeners

https://developers.arcgis.com/android/latest/guide/loadable-pattern.htm

Page 14: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Map Loaded

● LoadStatusChangedListener

● LoadStatusChanged

● Status

○ Loading

○ Not Loaded

○ Failed to Load

○ Loaded

Page 15: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

ListenableFuture pattern

• Asynchronous methods use ListenableFuture

- A promise to return a result

- Add done listener, or call get (blocking)

• Can simplify asynchronous programming

- we take care of executing operations on

background threads

- standard pattern for errors

Page 16: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

LocatorTask

● Future is a proxy or wrapper

around an object that is not

there yet

● geocodeFuture

○ Returns future

GeocodeResult

○ The promise that a

GeocodeResult will be

available in the future

○ Retrieve it with

geocodeFuture.get()

Page 17: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

ListenableList pattern

• Bind to data

• Add Listener to know when content changes

• Implemented on

- Graphics in a GraphicsOverlay

- LayerList (operational, base, reference layers)

- Sublayers in SublayerList

- Bookmarks

Page 18: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Add Graphic to GraphicsOverlays

Page 19: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Dan

Maps & Layers

Page 20: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Map/MapView split

• MVC architecture

• Maps as a first class citizen

• GraphicsOverlay

MapView ArcGISMap

Layer

RasterLayer MapImageLayer TiledLayer

GraphicsOverlay

FeatureLayer

Page 21: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Map/MapView

• Content and presentation are separated

• ArcGISMap - separate class that defines content

- MapView references ArcGISMap

- Open a map, or build in code, modify, save

• MapView extends android.view.ViewGroup

- GraphicsOverlay(s), LocationDisplay, …

- Control visible extent of Map using Viewpoints

• Listenable lists of layers, bookmarks

Page 22: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Where Do Maps Come From?

• Portal (web maps)

- Create with a PortalItem or URL

• Pro (mobile maps)

- Access maps inside a Mobile Map Package

• You!

- Create a map in code

- Save to a portal

- Web maps and mobile maps will be different portal item types

- Save locally

Page 23: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Change Basemaps

DEMO

Page 24: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Rama

Geometries & Graphics

Page 25: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Geometry

• Immutable

• Has a spatial reference

• Can have z and m values

• Can be converted to/from Json

• Can create or modify with Builders

• Curves…

Page 26: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Geometry Builder - An Example

Page 27: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Geometry Operations

• Geometry Engine

- Buffer

- Clip

- Area

- GeodeticArea

- Project

- DistanceGeodetic

...more

Coordinate Conversion & Geographic Transformations in coming

releases

Page 28: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Graphics Overlay

• Temporary graphics added to MapView ONLY

• Contain List of Graphics

- Graphic (Attributes, symbol, geometry)

• Renderer

• Rendering mode

-Dynamic – better UX for display

-Static – good for lots of graphics

Page 29: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Map Sketching

DEMO

Page 30: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Rama

Portals & Authentication

Page 31: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

AuthenticationManager & Authentication Challenge Handler

• Authentication Manager

- Manages user authentication for secured resources

- Central place for

- Setting an authentication handler

- Manage in-memory credential cache

- Manage OAuth Configuration

- Manage certificates

• AuthenticationChallengeHandler

• UX for challenge

• Credentials (http, token-based)

• PKI certificates

• Self signed certificates

Page 32: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

DefaultAuthenticationChallengeHandler

exampleAuthenticationManager.setAuthenticationChallengeHandler(

new

DefaultAuthenticationChallengeHandler(context));

Page 33: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Security pattern – Oauth 2.0

• OAuthConfig

• Add to AuthenticationManager

• Use with DefaultAuthenticationChallengeHandler

• Also need to use DefaultOauthIntentReceiver

• Or use OAuthLoginManager directly

Page 34: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

OAuthManager with default challenge

handler example

AuthenticationManager.setAuthenticationChallengeHandler(

new DefaultAuthenticationChallengeHandler(context));

OAuthConfiguration config = new OAuthConfiguration(

<Portal URL>, <Client ID>, <Redirect URI>);

AuthenticationManager.addOAuthConfiguration(config);

Page 35: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Portal API

• A developer’s gateway to the portal information model

• High-level, coarse-grained APIs to access, use, create, and share

content

• Key Classes

• Portal

• PortalUser

• PortalItem

• PortalGroup

Page 36: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Portal - Workflows• Search for content and groups

• Portal.findItemsAsync(portalQueryParams)

• Portal.findGroupsAsync(portalQueryParams)

• Add, modify, and share content

• PortalUser.addPortalItemAsync(item, params, folder)

• PortalItem.updateDataAsync(json)

• PortalItem.shareWithGroupsAsync(groups)

Page 37: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Portal - Workflows

• Access foundational content of a portal

• Basemaps

• Featured Groups

Page 38: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Portal - Workflows

• Access user’s content and groups

• PortalUser.fetchContentAsync()

• PortalUser.fetchContentInFolderAsync(folder)

• PortalUser.getGroups()

Page 39: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Authentication & Portal

DEMO

Page 40: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Dan & Rama

Offline

Page 41: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Offline Patterns - Create Offline Content

Desktop:

• Consume Mobile Map Packages

created in ArcGIS Pro

• Consume Runtime Content created

in ArcMap

• Best for single user

• Network datasets for offline routing

Service:

• Programmatic pattern to support

large number of users

• Can use map extent to select parts of

database to download to device

Page 42: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Mobile Map Packages

• Share maps and basemaps with mobile apps

• Consolidates into a single file (*.mmpk)

• Can be shared with organizational account

• Use cases include navigation and geocoding

- Custom locators

- Custom networks

Page 43: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Open MMPK

● Provide a path

● Loadable

● Get Maps

● Get descriptions

● Get Thumbnails

● Load Async

Page 44: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Open Mobile Map Package

DEMO

Page 45: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Service Pattern - Create Offline Content

• GeodatabaseSyncTask

- Can generate an offline geodatabase

- Can sync edits made to offline geodatabase

• ExportTileCacheTask

- Can generate a TileCache from a service

Page 46: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

ExportTileCacheTask - Sample Code

Page 47: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

GeodatabaseSyncTask - SampleCode

Page 48: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Dan

Geocoding & Routing

Page 49: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Geocoding API

LocatorTask

- Loadable

- Future - Promise

GeocodeResult

- List

Page 50: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Geocoding API

Display Results

- ListenableList

- Add Graphic to

GRaphicsOverlay

s

Page 51: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Routing API -

WorkflowRouteTask

- Loadable

- Future - Promise

RouteParameters

- List

- Get/Add Stops

SolveAsync

- RouteResult - List

Display

- Graphic from RouteResult

- Add to GraphicsOverlay

Page 52: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Geocode and Route

DEMO

Page 53: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Dan

Moving Forward

Page 54: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

What’s coming

• Supporting the ArcGIS Platform

- Webmap layers

• Supporting 10.2.x equivalency issues (not all of them!)

- Image services

- Related tables

• Adding key new capabilities related to the ArcGIS Platform

- 3D on mobile

Page 55: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Agenda

• Introduction

• Developer Patterns

• Maps & Views

• Geometry & Graphics

• Portal & Authentication

• Offline

• Geocoding and Routing

Page 56: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies

Thank You

Page 57: ArcGIS Runtime SDK for Android - Recent Proceedingsproceedings.esri.com/library/userconf/devsummit17/papers/dev_int... · ArcGIS Runtime SDK for Android Building Apps ... Get dependencies