Android百度地图SDK—地图定位

本文详细介绍了Android应用中集成百度地图SDK进行地图定位的步骤,包括申请AK,注册定位服务,初始化地图,处理运行时权限,设置定位监听以及在地图上显示定位点的操作。提供了一套完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

百度地图SDK—地图定位

概述

记录Android百度地图开发过程中的一些细节

正文

1.申请百度地图AK,放Manifest清单文件application节点下

        <meta-data
                android:name="com.baidu.lbsapi.API_KEY"
                android:value="百度地图AK">
        </meta-data>

2.在Manifest的application节点下注册定位服务

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

3.如需用到地图控件,则还需要在Application类文件中进行地图初始化

    override fun onCreate() {
        super.onCreate()
        //初始化百度地图SDK
        SDKInitializer.initialize(this)
        SDKInitializer.setCoordType(CoordType.BD09LL)
    }

4.定位需要用到的运行时权限在6.0以上系统需要申请,否在会定位到非洲的大海里去

    private fun checkPermission() {
        val mPermissionList = arrayOf(
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.READ_PHONE_STATE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_EXTERNAL_STORAGE)
        ActivityCompat.requestPermissions(this, mPermissionList, 123)
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        mLocationClient.restart()//专门用于在6.0以上系统获取到权限后重新启动定位
    }

5.定位初始化LocationClient

        //定位初始化
        val mLocationClient = LocationClient(applicationContext)
        mLocationClient.registerLocationListener(myLocationListener)
        val option = LocationClientOption()
        option.coorType = "bd09ll"
        option.scanSpan = 0
        option.openGps = true
        mLocationClient.locOption = option
        mLocationClient.start()//启动定位

6.实现定位监听BDAbstractLocationListener

    val myLocationListener = object : BDAbstractLocationListener() {
        override fun onReceiveLocation(p0: BDLocation?) {
            val lat = p0!!.latitude//纬度
            val lng = p0!!.longitude//经度
            val radius = p0!!.radius//方向角度
            text_map.setText("lat:$lat, long:$lng")
        }

    }

7.要将定位点在地图上显示则需要初始化地图BaiduMap

        //地图初始化
        val baiduMap = mapView.map
        baiduMap.isMyLocationEnabled = true//开启定位图层

8.根据定位数据在地图上画出定位点MyLocationData

            val locationData = MyLocationData.Builder()
                    .accuracy(radius)
                    .latitude(lat)
                    .longitude(lng)
                    .direction(100f)
                    .build()
            baiduMap.setMyLocationData(locationData)//在地图上画出定位点
            baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(MapStatus.Builder().zoom(18.0f).target(LatLng(lat, lng)).build()))//移动到定位点

完整代码

class MapDemoActivity : AppCompatActivity() {
    lateinit var mLocationClient: LocationClient
    lateinit var baiduMap: BaiduMap

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_map_demo)

        //定位初始化
        mLocationClient = LocationClient(applicationContext)
        mLocationClient.registerLocationListener(myLocationListener)
        val option = LocationClientOption()
        option.coorType = "bd09ll"
        option.scanSpan = 0
        option.openGps = true
        mLocationClient.locOption = option
        mLocationClient.start()

        //地图初始化
        baiduMap = mapView.map
        baiduMap.isMyLocationEnabled = true//开启定位图层

        text_map.onClick {
            mLocationClient.requestLocation()//重新请求定位
        }

        if (Build.VERSION.SDK_INT >= 23) {
            checkPermission()
        }
    }

    val myLocationListener = object : BDAbstractLocationListener() {
        override fun onReceiveLocation(p0: BDLocation?) {
            val lat = p0!!.latitude
            val lng = p0!!.longitude
            val radius = p0!!.radius
            text_map.setText("lat:$lat, long:$lng")
            val locationData = MyLocationData.Builder()
                    .accuracy(radius)
                    .latitude(lat)
                    .longitude(lng)
                    .direction(100f)
                    .build()
            baiduMap.setMyLocationData(locationData)
            baiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(MapStatus.Builder().zoom(18.0f).target(LatLng(lat, lng)).build()))
        }

    }

    override fun onResume() {
        super.onResume()
        mapView.onResume()
    }

    override fun onPause() {
        super.onPause()
        mapView.onPause()
    }

    override fun onDestroy() {
        mLocationClient.stop()//关闭定位
        baiduMap.isMyLocationEnabled = false//销毁定位图层
        mapView.onDestroy()//关闭地图
        super.onDestroy()
    }

    private fun checkPermission() {
        val mPermissionList = arrayOf(
                Manifest.permission.ACCESS_FINE_LOCATION,
                Manifest.permission.ACCESS_COARSE_LOCATION,
                Manifest.permission.READ_PHONE_STATE,
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                Manifest.permission.READ_EXTERNAL_STORAGE)
        ActivityCompat.requestPermissions(this, mPermissionList, 123)
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        mLocationClient.restart()
    }
}

——End——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值