学习笔记-----Android集成高德地图获取当前城市位置(不显示地图)

最近项目里有一个定位当前城市的功能,刚开始我选择用的是百度地图api去开发这个功能,可是根据百度地图提供的开发文档写的代码每次运行获取到的城市位置都是null值,奇怪的是我又能获取到当前位置的经纬度,于是我在csdn上找了好多篇博客去寻求解决办法,发现获取到的城市的值还是null,后面果断的选择高德地图。

下面分享我是如何实现这个功能的

高德地图开发者官网:http://developer.amap.com/
开发文档:http://developer.amap.com/api/android-sdk/summary/

1、去高德开发者平台创建应用,并且创建key

去高德题图开发者官网注册一个key(注:一个key只能对应一个项目)
SHA1码获取方式
packname就是项目的包名

2、手动添加高德地图的jar包

高德地图api官网下载相关jar包(我这个只有一个定位功能)在这里插入图片描述

添加完记得点击右键选择Add As Library将jar包手动添加到依赖库里

3、在main目录下创建jniLibs目录

添加so库
注意:3D地图才需要添加so库,2D地图无需这一步骤

这里写图片描述

4、在AS中的AndroidManifest.xml配置文件的application标签中加入对应的key

		<!-- 地图的key -->
        <meta-data
            android:name="com.amap.api.v2.apikey"
            android:value="你的key">
        </meta-data>

5、添加对应的权限(包括静态权限和动态权限)

可以通过我另一篇博客去开启应用的权限:如何开启动态权限
(注:可以根据你自己的项目添加相对应的权限)

6、获取当前的位置(不显示地图只显示当前位置)

public class MainActivity extends AppCompatActivity {

    //声明AMapLocationClient类对象
    AMapLocationClient mLocationClient = null;
    //声明AMapLocationClientOption对象
    public AMapLocationClientOption mLocationOption = null;

    private TextView mTextViewLocation;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextViewLocation = findViewById(R.id.textView_location);

        //获取当前位置信息
        getCurrentLocationLatLng();
    }

    /**
     * 初始化定位并设置定位回调监听
     */
    private void getCurrentLocationLatLng() {
        //初始化定位
        mLocationClient = new AMapLocationClient(getApplicationContext());
        //设置定位回调监听
        mLocationClient.setLocationListener(mLocationListener);
        //初始化AMapLocationClientOption对象
        mLocationOption = new AMapLocationClientOption();

        // 同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        //设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。默认连续定位 切最低时间间隔为1000ms
        mLocationOption.setInterval(3500);
        //给定位客户端对象设置定位参数
        mLocationClient.setLocationOption(mLocationOption);
    }


    /**
     * 定位回调监听器
     */
    public AMapLocationListener mLocationListener = new AMapLocationListener() {
        @Override
        public void onLocationChanged(AMapLocation amapLocation) {
            if (amapLocation != null) {
                if (amapLocation.getErrorCode() == 0) {
                    //定位成功回调信息,设置相关消息
                    //获取当前定位结果来源,如网络定位结果,详见定位类型表
                    amapLocation.getLocationType();
                    //获取纬度
                    double currentLat = amapLocation.getLatitude();
                    //获取经度
                    double currentLon = amapLocation.getLongitude();
                    //获取当前城市位置
                    mTextViewLocation.setText(amapLocation.getCity());
                    Log.i("currentLocation", "currentLat : " + currentLat + " currentLon : " + currentLon);
                    //获取精度信息
                    amapLocation.getAccuracy();
                } else {
                    //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
                    Log.e("AmapError", "location Error, ErrCode:"
                            + amapLocation.getErrorCode() + ", errInfo:"
                            + amapLocation.getErrorInfo());
                }
            }
        }
    };


    @Override
    protected void onStart() {
        super.onStart();
        if (mLocationClient != null) {
            // 启动定位
            mLocationClient.startLocation();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (mLocationClient != null) {
            //停止定位
            mLocationClient.stopLocation();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mLocationClient != null) {
            //销毁定位客户端
            mLocationClient.onDestroy();
        }
    }

}

完成以上操作后就能获取到当前位置信息了。

参考:高得地图官方开发文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值