1、简介
最近项目中又要用到地图的定位了,怎么说呢,在实际的项目中地图用的还是挺多的,所以说这个咋们还是有必要好好去了解一下的,毕好好总结一下,下次再遇到直接复制黏贴就好了。
2、集成使用过程
1. 登录 高德地图官网,注册成为开发者账户
这里怎么注册成为开发者可以参照官网,有提示的比较简单,而且很容易审核通过的
2、创建应用
应用管理 --> 创建应用 ------> 填写包名信息
点击添加key 进行key的添加
讲一下如何获取SHA1吧
1.在右侧栏里找到grandle界面
2.按以下路径,查找到signingReport文件
3. 然后点击右下角的gradle console界面,里面就有SHA1码啦
接下来就是把上表给填写完整了,到这里基本的注册和创建Debug应用的准备算是准备好了。
3. 应用中使用
第 1 步,配置AndroidManifest.xml
a 声明Service组件
请在application标签中声明service组件,每个app拥有自己单独的定位service。
<service android:name="com.amap.api.location.APSService"></service>
b. 设置权限
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
c. 设置高德Key
d.代码
private void initMapAndShow(Bundle savedInstanceState) {
//创建地图 重要
mMapView.onCreate(savedInstanceState);
if (mAMap == null) {
mAMap = mMapView.getMap();
}
// 初始化定点蓝图样式
MyLocationStyle myLocationStyle = new MyLocationStyle();
// 设置定位的频率 2秒一次
myLocationStyle.interval(2000);
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);
myLocationStyle.strokeColor(STROKE_COLOR);
myLocationStyle.strokeWidth(0);
myLocationStyle.radiusFillColor(FILL_COLOR);
//设置定位蓝点的Style
mAMap.setMyLocationStyle(myLocationStyle);
// 显示定点蓝图
mAMap.setMyLocationEnabled(true);
// 设置放大缩小的控制是否可见
mAMap.getUiSettings().setZoomControlsEnabled(false);
mAMap.setOnMyLocationChangeListener(this);
}
@Override
public void onMyLocationChange(Location location) {
if (location != null) {
// 我的地址改变时的回调
mTvShowLat.setText(getString(R.string.show_lat,String.valueOf(location.getLatitude())));
mTvShowLang.setText(getString(R.string.show_lang,String.valueOf(location.getLongitude())));
// 第一次时 设置时间定位到当前
if (myLocation == null) {
myLocation = location;
if (carLocationLatlng == null) {
mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(myLocation.getLatitude(), myLocation.getLongitude()), 14));
}
}
}else {
UIUtils.showToast(getString(R.string.error_map_location));
}
}
@Override
protected void onDestroy() {
// 这里切忌 有些执行的动作需要在 onDestroy()
// 不然让onDestroy执行完了之后 有的信息都会被置空了
if (mMapView != null) {
mMapView.onDestroy();
}
super.onDestroy();
}
e. 效果