简单Android示例 + ArcGis 显示地图
本文概述:
-
本文介绍了如何使用ArcGis 官方教程编写简单安卓示例,实现地图显示功能;文章提供了完整编写思路,以及读者在复现代码时可能遇到的问题及其解决办法
环境准备:
编译器版本及所用语言
-
android studio 版本信息
-
编程语言:JDK版本信息
配置ArcGis 所需环境
-
添加Maven仓库:Android Studio更新后在settings.gradle中添加依赖
-
添加ArcGis Android 运行时依赖
//添加ArcGis Android运行时依赖 implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
-
添加网络权限
<!-- 添加网络权限--> <uses-permission android:name="android.permission.INTERNET" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" />
-
此时点击Gradle按钮,因为网络原因可能导致相关jar包无法下载,使得无法正常导入包
-
导入成功:
-
获取ArcGis 开发秘钥:后期需要使用ArcGis 服务则需要申请账号
-
查看并保存秘钥:
-
在项目中编写代码,将秘钥封装起来
-
封装示意:
-
调用代码:
// location services ArcGISRuntimeEnvironment.setApiKey(BuildConfig.API_KEY);
-
存放位置:这种秘钥一般放在哪里?
-
新建一个类保存成类属性还是怎么做:是可以这样干的,
- 现在的秘钥一般都是需要电脑的SSH 信息,这个是唯一的
-
-
编写代码:
-
工程结构示意:
-
添加res文件:在Android 开发中一般不采用字面量进行直接赋值
-
编写布局代码:activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <!-- 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> </RelativeLayout>
-
MainActivity代码
package mapandscenes.displaymap; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import com.cdqiantuo.arcgissdklearn.R; import com.esri.arcgisruntime.ArcGISRuntimeEnvironment; import com.esri.arcgisruntime.mapping.ArcGISMap; import com.esri.arcgisruntime.mapping.BasemapStyle; import com.esri.arcgisruntime.mapping.Viewpoint; import com.esri.arcgisruntime.mapping.view.MapView; public class MainActivity extends AppCompatActivity { private MapView mMapView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArcGISRuntimeEnvironment.setLicense("runtimelite,1000,rud4449636536,none,NKMFA0PL4S0DRJE15166"); // 需要使用API密钥或命名用户进行身份验证才能访问基图和其他 // location services ArcGISRuntimeEnvironment.setApiKey(BuildConfig.API_KEY); // inflate MapView from layout mMapView = findViewById(R.id.mapView); // create a map with the a topographic basemap ArcGISMap map = new ArcGISMap(BasemapStyle.ARCGIS_TOPOGRAPHIC); // set the map to be displayed in this view mMapView.setMap(map); mMapView.setViewpoint(new Viewpoint(34.056295, -117.195800, 10000)); } @Override protected void onPause() { mMapView.pause(); super.onPause(); } @Override protected void onResume() { super.onResume(); mMapView.resume(); } @Override protected void onDestroy() { mMapView.dispose(); super.onDestroy(); } }
-
运行截图:
异常出现及处理手段:2 files found with path 'META-INF/DEPENDENCIES'.
-
异常截图:
-
异常原因:在配置文件中对第三方库引入多次,导致冲突
-
解决手段:删掉多余的就行了
-
根据异常信息(2 files found with path 'META-INF/DEPENDENCIES'.)定为冲突的位置: 'META-INF/DEPENDENCIES'
packagingOptions { exclude 'META-INF/DEPENDENCIES' }
-
根据异常信息定位出错的配置文件
-
将上面的解决代码添加到相应的配置文件中
android { //方便定位文件 compileSdk 32 …… //处理SDK 冲突 packagingOptions { exclude 'META-INF/DEPENDENCIES' } }
-