欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

BaiduMap SDK-Locatioin配置和案例

程序员文章站 2022-04-20 11:56:55
...

目录

3. Locatioin配置

3.1 新建项目

3.2 添加jar包

3.3 配置jar到gradle文件

3.4 添加百度key

3.5 声明service组件

3.6 添加权限

4. Location案例 


3. Locatioin配置

3.1 新建项目

3.2 添加jar包

添加jar包和so库文件到项目的libs中

3.3 配置jar到gradle文件

File->Project Structure->选择moudle->切换到Dependencies->添加jar包;

BaiduMap SDK-Locatioin配置和案例

3.4 添加百度key

在AnroidManifest.xml文件中添加百度key

<meta-data
      android:name="com.baidu.lbsapi.API_KEY"
      android:value="LWQSQGGAXKsehvyBC4vzmz0fGI8VpuyF" />

3.5 声明service组件

在AnroidManifest.xml文件中添加百度定位Service

  <service
       android:name="com.baidu.location.f"
       android:enabled="true"
       android:process=":remote" />

3.6 添加权限

<!-- 这个权限用于进行网络定位-->
<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>

4. Location案例 

1. 设置BaiduMap显示定位图标

baiduMap.setMyLocationEnabled(true);

2. 创建定位客户端LocationClient对象

locationClient = new LocationClient(getApplicationContext());

3. 添加监听

 locationClient.registerLocationListener(new MyLocationListener());

4. 创建定位参数LocationClientOption对象和设置到定位

       LocationClientOption option = new LocationClientOption();
        option = new LocationClientOption();
        //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
        option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);
        //可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
        option.setCoorType("bd09ll");
        //可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
        option.setScanSpan(3000);
        //可选,设置是否需要地址信息,默认不需要
        option.setIsNeedAddress(true);
        //可选,设置是否需要地址描述
        option.setIsNeedLocationDescribe(true);
        //可选,设置是否需要设备方向结果
        option.setNeedDeviceDirect(false);
        //可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
        option.setLocationNotify(false);
        //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
        option.setIgnoreKillProcess(true);
        //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京*附近”
        option.setIsNeedLocationDescribe(true);
        //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
        option.setIsNeedLocationPoiList(true);
        //可选,默认false,设置是否收集CRASH信息,默认收集
        option.SetIgnoreCacheException(false);
        //可选,默认false,设置是否开启Gps定位
        option.setOpenGps(true);
        //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
        option.setIsNeedAltitude(false);

        locationClient.setLocOption(option);

5. 开启定位

locationClient.start();

6. 监听和回调函数

private class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            if (bdLocation != null && mapView != null) {
                //设置定位图标信息
                MyLocationData myLocationData = new MyLocationData.Builder().accuracy(bdLocation.getRadius()).latitude(bdLocation.getLatitude()).longitude(bdLocation.getLongitude()).build();
                baiduMap.setMyLocationData(myLocationData);

                //设置地图的缩放级别、中心坐标
                MapStatus.Builder builder = new MapStatus.Builder();
                builder.target(new LatLng(bdLocation.getLatitude(), bdLocation.getLongitude())).zoom(17.0f);
                baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
            }
        }
    }

7.关闭定位图层并停止定位

 locationClient.stop();
 //关闭定位图层
 baiduMap.setMyLocationEnabled(false);