原文地址:https://developers.arcgis.com/android/latest/guide/develop-your-first-map-app.htm
用Java开发你的第一个地图应用程序
本教程将指导您完成使用ArcGIS Runtime SDK for Android创建基本地图应用程序的过程,该应用程序使用Android Studio集成开发环境(IDE)使用特定的初始地图范围显示地图。
本教程是为Android Studio 3.1.2版编写的 - 不同的Android Studio版本在用户界面标题或选项的名称上可能略有不同。Esri建议使用最新的Android Studio稳定版。
您将使用Java语言开发应用程序。或者,您可以使用Kotlin遵循相同的教程。
先决条件
在开始之前,请确保您已完成以下操作:
- 符合系统要求。
- 安装了Android的官方IDE Android Studio。
- 获得了为Android平台开发应用程序和使用的术语的基本知识。有关信息,请参阅Android开发者主页。
在Android Studio中创建一个新项目
启动Android Studio时,将显示“ 欢迎”屏幕。从这里,您可以创建一个新的Android应用程序项目。
- 单击“ 启动新的Android Studio项目”。
如果已打开项目,可以单击“ 文件”>“新建”>“新建项目”。
- 在应用程序名称文本框中,键入显示地图。
确保未选中Include Kotlin支持框。(要在地图应用中使用Kotlin而不是Java,请参阅使用Kotlin 开发第一个地图应用。)
如果需要,请更改公司域和项目位置,然后单击“ 下一步”。
- 在Target Android Devices对话框中, 选中Phone and Tablet选项,从Minimum SDK下拉列表中选择API 19:Android 4.4或更高版本,然后单击Next。
- 在“ 向活动添加活动”对话框中,单击“ 清空活动”,然后单击“ 下一步”。
- 保留向导其余部分中的默认选项,然后单击“ 完成”。
将打开一个新的Android应用程序项目,显示默认布局。
您现在已成功创建包含应用程序模块的Android项目。接下来,您将添加ArcGIS Runtime SDK for Android依赖项。
添加ArcGIS Runtime SDK for Android AAR依赖项
在这里,您将更新gradle构建脚本,以将ArcGIS Runtime SDK for Android依赖项添加到您的app模块。这将在您构建应用程序时自动从Esri公共Bintray Maven存储库下载Android Archive(AAR)包。
Android是一种权限分离的操作系统。您还将添加应用所需功能的权限。
- 在Android项目视图窗口中的Gradle Scripts下,双击build.gradle(项目:<项目名称>)。
这将打开适用于项目中所有模块的顶级构建文件。如果您不熟悉Gradle构建系统,请参阅构建系统概述。
- 在脚本的allprojects / repositories块中,添加一个新的maven块,如图所示,其值为url'https://esri.bintray.com/arcgis '。完整部分现在看起来像下面的代码:
allprojects { repositories { google() jcenter() // Add the Esri public Bintray Maven repository maven { url 'https://esri.bintray.com/arcgis' } } }
该指令通过指定Maven存储库URL告知Gradle在哪里查找适用于Android依赖项的ArcGIS Runtime SDK。
- 在Android项目视图窗口的Gradle Scripts下,双击build.gradle(Module:<module name>)。
这将打开适用于项目中单个应用程序模块的模块级构建文件。如果您不熟悉Gradle构建系统,请参阅构建系统概述。
- 在脚本的依赖项块中,添加一个新行“ implementation'com.esri.arcgisruntime:arcgis-android:100.4.0'”。依赖块现在看起来应该像下面的代码 - 存在的依赖项的确切列表将取决于Android Studio的版本和所选的项目设置:
dependencies { implementation 'com.esri.arcgisruntime:arcgis-android:100.4.0' implementation fileTree(dir: 'libs', include: ['*.jar']) [more dependencies...] }
(在Android Studio 3.0之前,您将使用编译值而不是实现。)
- 在Android Studio工具栏中,单击“使用Gradle文件同步项目”。或者,当您在Gradle脚本窗口顶部看到自上次项目同步消息后Gradle文件已更改时,请单击立即同步。
- 在Android项目视图窗口的app> manifests下,双击AndroidManifest.xml。
这将打开您的应用程序的清单文件。
- 添加以下XML元素作为现有清单的子元素:
<uses-permission android:name="android.permission.INTERNET" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" />
您已将ArcGIS Runtime SDK for Android AAR 的依赖项添加到您的应用程序模块。接下来,您将向应用添加一个显示地图服务的地图,并为该地图设置初始范围。
使用Java 8语言功能
Android Studio 3.0引入了对Java 8语言功能子集的支持,这些功能因平台版本而异。例如,lambda表达式和方法引用可以在具有任何minSdkVersion值的Android Studio 3.0模块中使用。这些语言功能在整个ArcGIS Runtime SDK for Android文档和示例中使用,因此,为确保在应用程序中使用这些代码示例进行编译,您将设置模块的兼容性以使用Java 8语言功能。
- 在Android项目视图窗口的Gradle Scripts下,双击build.gradle(Module:<module name>)以再次打开app module gradle构建脚本。
- 将以下指令添加到现有的android块。
android { [...] // Add below lines to set compatibility with Java 8 language features for an Android app module. compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }
您现在可能需要再次同步gradle脚本。
小费:
您还可以在“ 项目结构”对话框的“ 模块属性”选项卡中进行配置(单击“ 文件”,然后单击“ 项目结构”)。
如果您在使用受支持的Java 8语言功能时遇到问题,请确保您拥有最新的Android Studio更新,并且您的项目使用Android插件版本3.0.0或更高版本。这是在顶级gradle构建脚本中的com.android.tools.build.gradle依赖项中指定的。
将MapView添加到布局中
现在您已经使用适用于Android AAR的ArcGIS Runtime SDK创建了一个应用程序,下一步是将MapView添加到活动布局中。
- 在Android项目视图窗口的应用程序下,单击res> layout,然后双击activity_main.xml。
这将打开主活动布局的中央内容的“ 预览”视图。请注意,根据您使用的确切Android Studio版本以及您选择的初始活动模板,项目可能包含多个布局XML文件 - 例如,如果您选择了基本活动模板,则可能需要改为打开content_main.xml布局。
- 在窗口的左下角,单击“ 文本”以显示布局的XML视图(如果尚未显示)。
- 选择整个TextView XML元素并将其替换为MapView元素,如下所示:
<com.esri.arcgisruntime.mapping.view.MapView android:id="@+id/mapView" android:layout_width="match_parent" android:layout_height="match_parent" > </com.esri.arcgisruntime.mapping.view.MapView>
要更全面地了解用户界面(UI)设计的声明性方法,请参阅声明布局。此外,ConstraintLayout通常使用不同类型的布局约束属性; 有关更多信息,请参阅Constraint Layout文档。
在MapView上设置地图
默认情况下,MapView不显示任何内容,因此下一步是定义要显示的地图。您将指定地图显示ArcGIS Online中的全球地形底图。由于应用程序最初显示特定区域而不是整个范围通常更有用,您还可以将地图设置为放大到特定中心点 - 显示加利福尼亚州雷德兰兹的Esri校园。
- 在Android项目视图窗口的app下,单击java> [package name],然后双击MainActivity。
这将打开定义应用程序默认活动的Java代码。
- 将以下类变量声明添加到MainActivity类的顶部:
private MapView mMapView;
- Android Studio将以红色突出显示必须导入到类中的MapView类。将指针放在文本突出显示为红色的行上,然后按Alt + Enter解析符号。选择导入com.esri.arcgisruntime.mapping.view.MapView。
import com.esri.arcgisruntime.mapping.view.MapView;
- 在对setContentView的现有调用之后,将以下代码添加到onCreate方法:
mMapView = findViewById(R.id.mapView); ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 34.056295, -117.195800, 16); mMapView.setMap(map);
注意:
您需要导入com.esri.arcgisruntime.mapping.ArcGISMap和com.esri.arcgisruntime.mapping.Basemap。
此代码获取对布局中定义的MapView的引用。(在此之前Android Studio中版本3.0,从返回的对象findViewById必须显式转换到的MapView类型。)一种ArcGISMap创建与特定的预定义Basemap.Type,在一组特定的坐标为中心,并放大到特定水平的详情。然后将ArcGISMap设置到MapView中。
- 将以下方法添加到MainActivity类,以覆盖从父活动类继承的onPause,onResume和onDestroy方法,这些方法在调用这些方法时暂停,恢复和释放MapView:
@Override protected void onPause(){ mMapView.pause(); super.onPause(); } @Override protected void onResume(){ super.onResume(); mMapView.resume(); } @Override protected void onDestroy() { super.onDestroy(); mMapView.dispose(); }
您现在已经完成了将ArcGIS Runtime SDK for Android地图添加到新Android应用程序的步骤。您现在已准备好构建和测试您的应用程序。
构建并运行应用程序
要测试您的应用程序,您需要准备好连接设备进行调试或设置并启动模拟器。要查找更多内容,请参阅Android文档使用模拟器或使用硬件设备。
- 在Android Studio工具栏中,单击“运行”。
- 在“ 连接的设备”对话框中,选择要使用的设备或模拟器,然后单击“确定”。
- 当应用程序在您的设备上打开时,它会显示以加利福尼亚州雷德兰兹为中心的街道地图。您可以双击地图进行放大。
创建新项目时,Android Studio会自动创建运行配置以在您的设备上启动应用程序。您将看到类似于以下屏幕截图的内容。
小费:
如果应用程序运行但地图为空,请检查android.permission.INTERNET权限是否已正确添加到Android清单中。
就是这样,您已经完成了第一个适用于Android应用的ArcGIS Runtime SDK。
不要忘记您可以在GitHub上的Display a Map示例中查看已完成的代码