版权声明:转载请注明出处 https://blog.csdn.net/dl10210950/article/details/73551545
最近的项目里面需要定位,就弄了弄高德地图,以前觉得百度地图接入简单,弄完高德地图发现更加简单
现总结一下,以后需要直接过来copy代码
1,官网后台注册,创建App,然后就是添加新Key
key名称随便取
发布版安全码SHA1和包名这东西点击链接自己按照步骤弄:点击查看步骤
我之前就是偷懒,在以前别人留下的项目里面复制的key,最后定位不出来,定位地址为空,然后就过来弄这个了,弄完就能正常定位了,因为包名不一样
还有就是弄安全码SHA1得时候,发现控制台密钥的密码输入不进去,最后百度发现是输进去了,就是控制台不显示,我们只要正常输入进去按回车键就行了
配置完成之后就可以拿到key了
接下来是配置android studio
manifast里面 :
1,权限
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
2,appkey
<!-- 高德地图的apikey -->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="14a77baca92ed1de7c4a7ea27bc55959" />
3,serveice
<!--高的地图-->
<service android:name="com.amap.api.location.APSService"></service>
注意2和3都是在application标签里面的
接下来就是定位的具体代码,我写成一个工具类,下面是在实例化工具类的时候去启动定位
//声明AMapLocationClient类对象
private AMapLocationClient mLocationClient = null;
private AMapLocationClientOption locationOption = null;//定位设置
private OnLocationPass onLocationPass;
public GaoDeMapUtils(Context context) {
//初始化定位
mLocationClient = new AMapLocationClient(context);
locationOption = new AMapLocationClientOption();
//设置定位模式为高精度模式
locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
mLocationClient.setLocationListener(this);
locationOption.setOnceLocation(true);//单次定位
locationOption.setNeedAddress(true);//逆地理编码
mLocationClient.setLocationOption(locationOption);//设置定位参数
mLocationClient.startLocation();//启动定位
}
我这里是实现接口的方式去监听定位结果
public class GaoDeMapUtils implements AMapLocationListener {}
然后就会需要实现一个监听定位回调的方法
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
//具体地址
String address = aMapLocation.getAddress();
//城市
String city = aMapLocation.getCity();
//经纬度
double latitude = aMapLocation.getLatitude();
double longitude = aMapLocation.getLongitude();
Log.e("duanlian", "onLocationChanged: " + address);
if (!"".equals(city)) {
//通过接口回调把定位的城市传递过去
onLocationPass.onLocation(city);
}
}
整个工具类完整的代码是:
package com.csxer.ttgzand.utils;
import android.content.Context;
import android.util.Log;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
/**
* 创建于:2017/6/21 by 段炼
* 本类功能:高德地图
**/
public class GaoDeMapUtils implements AMapLocationListener {
//声明AMapLocationClient类对象
private AMapLocationClient mLocationClient = null;
private AMapLocationClientOption locationOption = null;//定位设置
private OnLocationPass onLocationPass;
public GaoDeMapUtils(Context context) {
//初始化定位
mLocationClient = new AMapLocationClient(context);
locationOption = new AMapLocationClientOption();
//设置定位模式为高精度模式
locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
mLocationClient.setLocationListener(this);
locationOption.setOnceLocation(true);//单次定位
locationOption.setNeedAddress(true);//逆地理编码
mLocationClient.setLocationOption(locationOption);//设置定位参数
mLocationClient.startLocation();//启动定位
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
//具体地址
String address = aMapLocation.getAddress();
//城市
String city = aMapLocation.getCity();
//经纬度
double latitude = aMapLocation.getLatitude();
double longitude = aMapLocation.getLongitude();
Log.e("duanlian", "onLocationChanged: " + address);
if (!"".equals(city)) {
//通过接口回调把定位的城市传递过去
onLocationPass.onLocation(city);
}
}
public void setOnLocationPass(OnLocationPass locationPass) {
this.onLocationPass = locationPass;
}
public interface OnLocationPass {
void onLocation(String city);
}
}
然后就是在需要的地方去调用并且获取数据了
private GaoDeMapUtils gaoDeMapUtils;//高德地图
//去定位
gaoDeMapUtils = new GaoDeMapUtils(getContext());
//通过回调获取定位到的城市
gaoDeMapUtils.setOnLocationPass(new GaoDeMapUtils.OnLocationPass() {
@Override
public void onLocation(String city) {
tvLocation.setText(city);
}
});