高德地图定位

版权声明:转载请注明出处 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);
            }
        });


猜你喜欢

转载自blog.csdn.net/dl10210950/article/details/73551545