本来我是用10.2.6的arcgis sdk开发了一个APP,之前在android 5.0的三星手机上使用也没什么问题,后来在android 6.0的小米手机上测试,发现地图界面加载失败,用try catch语句捕获异常(android.view.InflateException: Binary XML file line #6: Binary XMLfile line #6: Error inflating class com.esri.android.map.mapView),怀疑是不是这个SDK不支持android6.0。
研究了一下在线获取arcgis sdk的方式来开发地图,经验证,可以正常在android6.0上使用。网上关于这方面的介绍很多,本人仅仅对这些介绍进行了精简。
本人使用android studio开发环境,
demo可以从http://download.youkuaiyun.com/detail/pp9105/9658097下载。
在线获取arcgis sdk的方式很简单,不需要手动下载任何东西,直接用最傻瓜的方式新建一个android studio工程,然后具体修改3个地方,就可以在android 6.0上面跑arcgis地图了。
1、 修改Project的build.gradle,增加以下代码
allprojects{
repositories{
jcenter()
maven{
url'http://esri.bintray.com/arcgis'
}
}
}
subprojects{
afterEvaluate{project->
if(project.hasProperty("dependencies")){
dependencies{
compile'com.esri.arcgis.android:arcgis-android:10.2.8'
}
}
}
}
2、 修改Module的build.gradle,在android的大括号里面增加以下代码
packagingOptions{
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
3、 修改AndroidManifest.xml,增加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
然后就是在activity和layout中添加地图的相关代码了。增加了之后可能一开始会显示红色,编译一下就OK了,应该是自动下载了arcgis的SDK。
1、 activity_main.xml文件添加代码
<com.esri.android.map.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
2、MainActivity.java中添加代码
MapView mMapView=(MapView)findViewById(R.id.mapview);
ArcGISTiledMapServiceLayer tileLayer = new ArcGISTiledMapServiceLayer(
"http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer");
mMapView.addLayer(tileLayer);