Android中引用百度地图sdk

1.在百度那里注册成为开发者,创建对应的应用,填写包名,sha1,最后得到AK。
2.下载sdk,解压得到jar包,和各个平台的so库。
3.由于我是组件化开发,将jar包和各个平台的so库目录复制到common的libs目录下,右击jar包,add as library。common的build.gradle就多此jar的引用。

//这里是common模块,使用api,而不是implementation
 api files('libs/BaiduLBS_Android.jar')

4.在app的AndroidManifest.xml下加以下内容

    
    
    
    
    
    
        
        

5.在application中初始化sdk

        SDKInitializer.initialize(application);
        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);

6.地图控件如下

    

7.定位

                        baiduMap = map_id.map
                        baiduMap.mapType = BaiduMap.MAP_TYPE_NORMAL
                        baiduMap.isMyLocationEnabled = true
                        baiduMap.setIndoorEnable(true)
                        //室内室外
                        baiduMap.setOnBaseIndoorMapListener(object :BaiduMap.OnBaseIndoorMapListener{
                            override fun onBaseIndoorMapMode(
                                p0: Boolean,
                                p1: MapBaseIndoorMapInfo?
                            ) {
                                if(p0){
                                    Log.d("position","室内")
                                }else{
                                    Log.d("position","室外")
                                }
                            }

                        })
                        //定位
                        mLocationClient = LocationClient(this@Login)
                        val option = LocationClientOption()
                        option.setOpenGps(true) // 打开gps
                        option.setCoorType("bd09ll") // 设置坐标类型
                        option.addrType = "all"
                        option.setScanSpan(1000)
                        mLocationClient.setLocOption(option)
                        mLocationClient.registerLocationListener(object :BDAbstractLocationListener(){
                            override fun onReceiveLocation(location: BDLocation?) {
                                if (location == null || baiduMap == null) {
                                    return
                                }
                                val locData: MyLocationData = MyLocationData.Builder()
                                    .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360
                                    .direction(location.getDirection())
                                    .latitude(location.getLatitude())
                                    .longitude(location.getLongitude())
                                    .build()
                                if(isFirst){
                                    //如果不改为false则每一秒都会中心定位到移动到当前位置
                                    isFirst = false
                                    var latLng = LatLng(location.latitude,location.longitude)
                                    baiduMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(latLng))
                                }
                                baiduMap.setMyLocationData(locData)
                                var stringBuilder =  StringBuilder()
                                stringBuilder.append("\n经度:" + location.getLatitude())
                                stringBuilder.append("\n纬度:"+ location.getLongitude())
                                stringBuilder.append("\n状态码:"+ location.getLocType())
                                stringBuilder.append("\n国家:" + location.getCountry())
                                stringBuilder.append("\n城市:"+ location.getCity())
                                stringBuilder.append("\n区:" + location.getDistrict())
                                stringBuilder.append("\n街道:" + location.getStreet())
                                stringBuilder.append("\n地址:" + location.getAddrStr())
                                Log.d("location","detail:"+stringBuilder.toString())
                                city_id.text = location.city
                        //运动轨迹描绘
                                if(isFirstPoint){
                                    currentPoint = LatLng(location.latitude,location.longitude)
                                    isFirstPoint = false
                                }else{
                                    var points = ArrayList()
                                    var p2 = LatLng(location.latitude,location.longitude)
                                    points.add(currentPoint)
                                    points.add(p2)
                                    var overOption =
                                        PolylineOptions()
                                            .width(10)
                                            .color(0xAAFF0000.toInt())
                                            .points(points)
                                    baiduMap.addOverlay(overOption)
                                    currentPoint = p2

                                }


                            }

                        })
                        mLocationClient.start()

注意事项:
(1)如果没有获得需要的权限就执行,会得到蓝色的背图的。
(2)如果没有 option.addrType = “all” 只能获得经纬度,无法获得国家城市等 更加详细的信息。
(3)定位要加上以下代码,不然无法定位,后面如果要定位,只需isFirst改为true即可。

 var latLng = LatLng(location.latitude,location.longitude)
baiduMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(latLng))

顺便吐槽,百度地图sdk开发文档写得是真的烂,和腾讯有得一比。

你可能感兴趣的:(android,百度,定位)