Android 集成高德地图定位笔录

作者: 夜远曦白 | 来源:发表于2018-01-16 17:27 被阅读72次

哈~ 好久没来记笔记了,由于接手的他人的公司的项目集成了高德地图定位,突发心血来潮,也来体验体验这个过程了。

  • 浏览器搜索高德定位,进入高德开放平台,注册一个账号,当然有高德开放平台账号的话就不用注册了,登录就OK

  • 首先 进入自己账户的控制台,获取Key,进入自己账户的控制台,创建一个新应用。如果之前创建过应用,可直接跳过。

    1 写Demo嘛,我就随意创建了一个
2

添加新Key(这里需要获取SHA1,我的demo使用就是AS自带的debug签名文件,按照官方的教程获取它,然后把资料填写完整)


image.png image.png

然后就能在控制台看到自己申请的 Key 啦~

  • 接下来 下载sdk了,我就下了个定位SDK,现在的版本是V3.7.0

    image.png
  • 将jar包放入项目中lib下面,配置好 build.gradle 文件(我这里使用的是拷贝jar包的方式,当然官方开发文档上还有添加SDK依赖的方式)


    image.png image.png
  • 添加高德 Key 打开项目的 AndroidManifest.xml 文件中,添加代码,声明service(每个app拥有自己单独的定位service),当然把刚刚申请到的key填充进去:

    image.png
  • 声明权限

    <!--用于进行网络定位-->
    <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" />
public class MapLocationHelper implements AMapLocationListener {

    /**
     * 声明mlocationClient对象
     */
    private AMapLocationClient mLocationClient;
    /**
     * 声明mLocationOption对象
     */
    public AMapLocationClientOption mLocationOption = null;
    private LocationCallBack mLocationCallBack;
    private Context mContext;

    public MapLocationHelper(Context context) {
        mContext = context;
        initLocation();
    }

    public MapLocationHelper(Context context, LocationCallBack locationCallback) {
        mContext = context;
        mLocationCallBack = locationCallback;
        initLocation();
    }

    /**
     * 初始化定位参数
     */
    private void initLocation() {
        mLocationClient = new AMapLocationClient(mContext);
        mLocationOption = new AMapLocationClientOption();
        // 设置定位监听
        mLocationClient.setLocationListener(this);
        // 设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        // 设置定位间隔,单位毫秒,默认为2000ms
        mLocationOption.setInterval(2000);
        // 设置定位参数
        mLocationClient.setLocationOption(mLocationOption);
    }

    /**
     * 设置回调
     * @param locationCallBack
     */
    public void setLocationCallBack(LocationCallBack locationCallBack){
        mLocationCallBack = locationCallBack;
    }

    /**
     * 开启定位
     */
    public void startMapLocation() {
        if (!mLocationClient.isStarted()) {
            mLocationClient.startLocation();
        }
    }

    /**
     * 停止定位服务
     */
    public void stopMapLocation() {
        if (mLocationClient.isStarted()) {
            mLocationClient.stopLocation();
        }
    }

    @Override
    public void onLocationChanged(AMapLocation aMapLocation) {
        if (aMapLocation != null) {
            if (aMapLocation.getErrorCode() == 0) {
                // 可在其中解析amapLocation获取相应内容。
                mLocationCallBack.onCallLocationSuc(aMapLocation);
                stopMapLocation();
            } else {
                //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
                Log.e("AmapError", "location Error, ErrCode:"
                        + aMapLocation.getErrorCode() + ", errInfo:"
                        + aMapLocation.getErrorInfo());
                stopMapLocation();
            }
        } else {
            stopMapLocation();
        }
    }
}
public interface LocationCallBack {

    void onCallLocationSuc(AMapLocation location);
}

使用定位:


image.png

初始化:

MapLocationHelper helper = new MapLocationHelper(this, this);
helper.startMapLocation();

拿到定位数据:

@Override
    public void onCallLocationSuc(AMapLocation location) {
        Log.d(TAG, "Address:" + location.getAddress());
        Log.d(TAG, "City:" + location.getCity());
        Log.d(TAG, "CityCode:" + location.getCityCode());
        Log.d(TAG, "Country:" + location.getCountry());
        Log.d(TAG, "Province:" + location.getProvince());
        Log.d(TAG, "Latitude:" + location.getLatitude());
        Log.d(TAG, "Longitude:" + location.getLongitude());
    }
打印结果: image.png

OK!完结了!

相关文章

网友评论

本文标题:Android 集成高德地图定位笔录

本文链接:https://www.haomeiwen.com/subject/srxugxtx.html