Android 百度地图定位

最近在做一个两年前被搁置的项目,涉及到定位,但是有些功能已经用不了了,所以更新SDK又集成了一次,非常简单,这里只做入门级讲解,官方文档也很详细的。

准备工作

1.打开百度地图开放平台,找到功能与服务,选择定位,点击Android 定位SDK(v7.5),然后这就是官方文档了。
2.然后注册登陆,创建应用,填写之后得到一个AK,以前是AppKey,一个意思。
这里写图片描述

a. 应用名称:开发者请自行定义,建议与应用名称一致,便于管理;
b. 应用类型:开发者请注意选择为Android SDK,选择其他类型,将导致所生成的AK不可用;(启用服务默认全部启用即可)
c. 填写SHA1和包名:这两个信息请开发者注意准确填写,它们是AK验证合法性的唯一依据。

SHA1获取方法:
  1. 打开Android Studio,进入Terminal工具,如下图所示:
    这里写图片描述

  2. 输入命令行和密码,即可获取SHA1等信息。
    命令行:keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey (注意目录选择、开发版本、发布版本等问题);
    密码:原始密码一般为android,开发者根据实际情况填写。
    这里写图片描述

包名大家应该知道怎么弄的吧。。

配置工作

1.在文档的下方有一个相关下载 tab,解压之后如下图所示
这里写图片描述

2.然后把arm64-v8aarmeabiBaiduLBS_Android.jar 三个文件拷到项目中的libs文件夹下

这里写图片描述

3.配置build.gradle文件,设置sourceSets
这里写图片描述

4.配置AK

<meta-data
    android:name="com.baidu.lbsapi.API_KEY"
    android:value="开发者申请的AK" >
</meta-data>

这里写图片描述

5.配置权限和service

<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

ok,到这里就配置完了。

开始使用

以service为例

1.初始化LocationClient类,
2.并注册监听MyLocationListener,
3.然后通过LocationClientOption 来配置一些参数选项,
4.在MyLocationListener 的回调中,可以通过BDLocation 对象获取定位信息

public class MyLocationService extends Service {

    private LocationClient mLocationClient = null;
    private BDLocationListener myListener = new MyLocationListener();

    @Override
    public void onCreate() {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
        option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
        int span = 1000 * 300;
        option.setScanSpan(span);//设置发起定位请求的间隔
        option.setOpenGps(true);//可选,默认false,设置是否使用gps

        //可选,是否需要地址信息,默认为不需要,即参数为false
        //如果开发者需要获得当前点的地址信息,此处必须为true
        option.setIsNeedAddress(true);

        mLocationClient = new LocationClient(getApplicationContext());//声明LocationClient类
        mLocationClient.setLocOption(option);
        mLocationClient.registerLocationListener(myListener);//注册监听函数
        mLocationClient.start();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    public class MyLocationListener implements BDLocationListener {
        /**
         * 定位成功之后回调的方法
         */
        @Override
        public void onReceiveLocation(BDLocation location) {
            LogUtil.i("经纬度===", String.valueOf(location.getLongitude()) + "---" + String.valueOf(location.getLatitude()));
            LogUtil.i("省市区==="+location.getProvince()+location.getCity()+location.getDistrict());
        }
    }
}

打印
这里写图片描述

其它参数:

        double latitude = location.getLatitude();    //获取纬度信息
        double longitude = location.getLongitude();    //获取经度信息
        float radius = location.getRadius();    //获取定位精度,默认值为0.0f
        String addr = location.getAddrStr();    //获取详细地址信息
        String country = location.getCountry();    //获取国家
        String province = location.getProvince();    //获取省份
        String city = location.getCity();    //获取城市
        String district = location.getDistrict();    //获取区县
        String street = location.getStreet();    //获取街道信息

ok,简单的集成使用就这么简单,官方文档也是比较详细的。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yechaoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值