android: 高德地图

4次阅读

共计 2981 个字符,预计需要花费 8 分钟才能阅读完成。

分为地图, 定位, 搜索 (我还没做导航功能)
建议采用 gradle 方式集成
添加依赖
在 project/build.gradle 文件下添加 jcenter 的仓库地址
allprojects {
repositories {
jcenter() // 或者 mavenCentral()
}
}
在 app/build.gradle 下添加依赖
android {
defaultConfig {
ndk {
// 设置支持的 SO 库架构(开发者可以根据需要,选择一个或多个平台的 so)
abiFilters “armeabi”, “armeabi-v7a”, “arm64-v8a”, “x86″,”x86_64″
}
}
}

dependencies {
compile fileTree(dir: ‘libs’, include: [‘*.jar’])
//3D 地图 so 及 jar
compile ‘com.amap.api:3dmap:latest.integration’
// 定位功能
compile ‘com.amap.api:location:latest.integration’
// 搜索功能
compile ‘com.amap.api:search:latest.integration’
}
navi 导航 SDK 5.0.0 以后版本包含了 3D 地图 SDK,所以请不要同时引入 map3d 和 navi SDK。
添加权限
在 AndroidManifest.xml 文件下添加权限
<!– 允许程序打开网络套接字 –>
<uses-permission android:name=”android.permission.INTERNET” />
<!– 允许程序设置内置 sd 卡的写权限 –>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />
<!– 允许程序获取网络状态 –>
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />
<!– 允许程序访问 WiFi 网络信息 –>
<uses-permission android:name=”android.permission.ACCESS_WIFI_STATE” />
<!– 允许程序读写手机状态和身份 –>
<uses-permission android:name=”android.permission.READ_PHONE_STATE” />
<!– 允许程序访问 CellID 或 WiFi 热点来获取粗略的位置 –>
<uses-permission android:name=”android.permission.ACCESS_COARSE_LOCATION” />
添加高德 key
如何获取 key 看这里 -> 点我查看 Key 注册时必要数据 SHA1 和包名的获取方法
建议同时设置 debug 和 release 状态下的 key, 方便 App 在 debug 模式下也能使用高德地图功能. 在 app/build.gradle 下设置两种 key
android {
buildTypes {
debug {
manifestPlacesholders = [
// 左边的键 MAP_API_KEY 是自定义的名字, 右边的 debug-key-value 是你申请的 debug 下的 key 值
“MAP_API_KEY” : “debug-key-value”
]
}

release{
manifestPlacesholders = [
// 左边的键 MAP_API_KEY 要和 debug 下的保持一致, 右边的 release-key-value 是你申请的 release 下的 key 值
“MAP_API_KEY” : “release-key-value”
]
}
}
}
在 AndroidManifest.xml 中添加 key
<application>
<meta-data
android:name=”com.amap.api.v2.apikey”
// 要和 app/build.gradle 文件中设置的保持一致
android:value=”${MAP_API_KEY}”/>
</application>
使用地图
在布局中引入地图 MapView
// R.layout.activity_your_activity
<com.amap.api.maps.MapView

android:id=”@+id/map”

android:layout_width=”match_parent”

android:layout_height=”match_parent”/>
管理地图的生命周期 (非常重要), 以 Activity 为例
public class YourActivity extends AppcompatActivity{

MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_your_activity);
// 获取地图控件引用
mMapView = (MapView) findViewById(R.id.map);
// 在 activity 执行 onCreate 时执行 mMapView.onCreate(savedInstanceState),创建地图
mMapView.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 在 activity 执行 onDestroy 时执行 mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
// 在 activity 执行 onResume 时执行 mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
// 在 activity 执行 onPause 时执行 mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 在 activity 执行 onSaveInstanceState 时执行 mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState);
}

}

构造一个 AMap 对象
if(mAMap == null){
mAMap = mapView.getMap();
}
初始化地图的相关属性
地图缩放级别
mAMap.animateCamera(CameraUpdateFactory.zoomTo(float zoomLevel));
显示定位蓝点
未完待续

正文完
 0