Android Studio开发ArcGIS项目有两种方式,一种是引用在线的ArcGIS库,一种是把【arcgis-runtime-sdk-android-100.2.1】下载下来后放到本地引用,先说在线引用,因为比较简单
方式一 :在线引用
1、新建工程
我的Android Studio版本是3.5的
file – new – new projet,
选择Empty Activity,点击next。
点击next后结果如下图:
我的Minimum API level是 19 ,android版本4.4(KitKat),点击finish。
得到如下图:
点击下图箭头位置,可以切换项目目录结构,
如下图,双击Gradle Scripts
双击【build.gradle(Project)】
在里面添加
// 添加Esri公共Bintray Maven repository
maven {
// url 'http://dl.bintray.com/esri/arcgis'
url 'https://esri.bintray.com/arcgis'
}
url 'http://dl.bintray.com/esri/arcgis’和url 'https://esri.bintray.com/arcgis’都可以,
如何找链接?百度 【maven】
进入页面后搜索arcgis
点击进入,之后再点击任意一个版本,
即可找到依赖和相关链接地址
在【build.gradle(Project)】添加完后如下图:
之后,打开【build.gradle(Module)】,
在里面添加
//添加Runtime依赖
implementation 'com.esri.arcgisruntime:arcgis-android:100.3.0'
如下图:
之后在 【manifests】下的【AndroidManifest.xml】里添加
<!--联网权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!--OpenGL ES支持 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
目的是使程序可以联网
在【activity_main.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>
如下图,同时注释掉【<TextView】
然后点击【Sync Project with Gradle files】按钮,如果没有这个按钮,可以在下图所示中点击【搜索】图标进行搜索,或按照下下张图所示进行添加:
点击【Sync Project with Gradle files】按钮会等待较长时间去下载依赖,初次下载时间挺长的,好了之后点击【Make Project】按钮,这是为了看看项目没有啥毛病。
没什么毛病就在【MainActivity】里添加代码,如下下张图
代码如下
public class MainActivity extends AppCompatActivity {
//定义一个MapView对象
public MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//将MapVIew对象与控件进行绑定
this.mMapView = (MapView)this.findViewById(R.id.mapView);
// 创建一个地图对象
ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 34.056295, -117.195800, 16);
// 设置地图展示在MapView控件中
mMapView.setMap(map);
}
@Override
protected void onPause() {
super.onPause();
mMapView.pause();
}
@Override
protected void onResume() {
super.onResume();
mMapView.resume();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.dispose();
}
}
之后自己百度配置模拟器或者链接手机运行代码进行测试
结果如下图:
项目代码:
链接: 在线引用项目代码
注意,我的手机是OPPO R11,有时可以正常运行,有时不能,所以我喜欢用模拟器,但是运行几次后,模拟器内存可能会满,不能安装程序,所以得清除内存,
流程如下:
点击【AVD Manager】
点击你的模拟器名字,右键【Wipe Data】,意思是清除数据,之后重启就能安装程序了。
方式二:本地引用
可以参考下面链接这篇文章去下载【ArcGIS Runtime SDK for Android】,
https://blog.csdn.net/Sky_Tree_Delivery/article/details/89887246,
【ArcGIS Runtime SDK for Android的下载网址是https://developers.arcgis.com/android/latest/】
下载好后创建个【Empty Activity】项目,
把项目目录模式改成【Project】如下图:
把下两张图的三个文件拷到你项目的【libs】目录中
libs目录内容如下
之后把项目目录结构改成【Android】类型,如图:
在【build.gradle (Project…)】里添加如下内容:
flatDir {
dirs 'libs'
}
如图:
再打开【【build.gradle (Module…)】】,添加如下内容:
implementation(name: 'arcgis-android-100.2.1', ext: 'aar')
implementation files('libs/gson-2.8.0.jar')
如下图
双击【Sync Project with Gradle files】按钮,查看【gson-2.8.0.jar】前面有没有三角图标,有表示jar包已经进入项目,没有则
如果没有三角图标,则表示jar包还未加入项目,则需要在【gson-2.8.0.jar】上右键【Add as Library】,以此添加
如果没有添加成功就按照下面三张图操作
按照下图检【arcgis-android-100.2.1.aar】查有没有添加进项目中,下图所示是添加进了。
如何在【AndroidManifest.xml】里添加如下内容:
<!--联网权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!--OpenGL ES支持 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
目的是让程序可以访问网络;
之后在【activity_main.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>
最后在【MainActivity】里添加
public MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//将MapVIew对象与控件进行绑定
this.mMapView = (MapView)this.findViewById(R.id.mapView);
// 创建一个地图对象
ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 34.056295, -117.195800, 16);
// 设置地图展示在MapView控件中
mMapView.setMap(map);
}
之后最后点击下【Sync Project with Gradle files】按钮,再点击下【Make Project】
如果没报错就点击运行,结果如下图:
注意:我的安卓手机有时会闪退,所以我使用的是模拟器进行展示,
模拟器运行几次后内存容易占满,此时需要清除模拟器内的缓存,方法我已经在【方式一】结尾处写了。