使用百度地图定位,仅为度为4.9E-324,或者经纬度正确,其他字段为null。及百度定位封装

1.经纬度为4.9E-324

location.locType(我用的kotlin,java为:location.getLocType())
查看错误代码,我的错误码是162,查看错误码说明:

点我------>查看百度地图定位对应的loctype码

162代表so库有问题
确保so库是在app模块,我是模块开发,把so库放在了base里面,导致162错误码

2.经纬度获取正确,其他字段为null

//默认为false,改为true
option.setIsNeedAddress(true)

3.封装BaiduMapHelper

class BaiduMapHelper {
    
    

    /**
     * 定位相关
     */
    var mLocationClient: LocationClient? = null
    private val myLocationListener = MyLocationListener()
    private var callBack: LocationCallBack? = null


    private constructor() {
    
    
        mLocationClient = LocationClient(BaseApplication.instanse, LocationClientOptiongetLocOption())
        mLocationClient!!.registerLocationListener(myLocationListener)
    }

    companion object {
    
    
        val instances: BaiduMapHelper by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
    
    
            BaiduMapHelper()
        }
    }


    fun start() {
    
    
        mLocationClient?.start()
    }

    fun stop() {
    
    
        if (mLocationClient != null) {
    
    
            mLocationClient?.unRegisterLocationListener(myLocationListener)
            mLocationClient?.stop()
            mLocationClient = null
        }
    }

    /**
     * 配置定位参数
     */
    private fun LocationClientOptiongetLocOption(): LocationClientOption {
    
    

        val option = LocationClientOption()
        //可选,设置定位模式,默认高精度
        //LocationMode.Hight_Accuracy:高精度;      LocationMode. Battery_Saving:低功耗;       LocationMode. Device_Sensors:仅使用设备;
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy)

        //可选,设置返回经纬度坐标类型,默认GCJ02
        //GCJ02:国测局坐标;
        //BD09ll:百度经纬度坐标;
        //BD09:百度墨卡托坐标;
        //海外地区定位,无需设置坐标类型,统一返回WGS84类型坐标
        option.setCoorType("bd09ll")

        //可选,设置发起定位请求的间隔,int类型,单位ms
        //如果设置为0,则代表单次定位,即仅定位一次,默认为0
        //如果设置非0,需设置1000ms以上才有效
        option.setScanSpan(1000)

        //可选,设置是否使用gps,默认false
        //使用高精度和仅用设备两种定位模式的,参数必须设置为true
        option.setOpenGps(true)

        //可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false
        option.setLocationNotify(false)

        //可选,定位SDK内部是一个service,并放到了独立进程。
        //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
        option.setIgnoreKillProcess(false)

        //可选,设置是否收集Crash信息,默认收集,即参数为false
        option.SetIgnoreCacheException(false)

        //可选,V7.2版本新增能力
        //如果设置了该接口,首次启动定位时,会先判断当前Wi-Fi是否超出有效期,若超出有效期,会先重新扫描Wi-Fi,然后定位
        option.setWifiCacheTimeOut(5 * 60 * 1000)


        //可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false
        option.setEnableSimulateGps(false)

        //可选,设置是否需要最新版本的地址信息。默认需要,即参数为true
        option.setNeedNewVersionRgc(true)

        option.setIsNeedAddress(true)

        return option

        //mLocationClient为第二步初始化过的LocationClient对象
        //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
        //更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
    }


    /**
     * 实现定位监听 位置一旦有所改变就会调用这个方法
     * 可以在这个方法里面获取到定位之后获取到的一系列数据
     */
    inner class MyLocationListener : BDAbstractLocationListener() {
    
    
        override fun onReceiveLocation(location: BDLocation) {
    
    
            if(callBack != null && location != null){
    
    
                location.locType
                println("定位结果:\n${
      
      location.latitude}\n${
      
      location.longitude}\n${
      
      location.city}\n${
      
      location.district}")
                //获取纬度信息 ~ 获取经度信息 ~ 城市 ~ 二级城市
                callBack!!.callBack("${
      
      location.latitude}","${
      
      location.longitude}",location.city,location.district)
            }else{
    
    
                println("---------------------------------------------------------" +
                        "\n定位回调为null" +
                        "\n--------------------------------------------------------")
            }
            mLocationClient?.stop()
        }
    }

    interface LocationCallBack {
    
    
        fun callBack(latitude: String, longitude: String, city: String, district: String)
    }

    fun getCallBack(): LocationCallBack {
    
    
        return this.callBack!!
    }
    fun setCallBack(locationListener: LocationCallBack){
    
    
        this.callBack = locationListener
    }

}

使用
外部累实现BaiduMapHelper.LocationCallBack接口,重写callBack

	/**
     * 开始定位
     */
    private fun startLocation() {
    
    
        baiduMapHelper = BaiduMapHelper.instances
        baiduMapHelper.setCallBack(this)
        baiduMapHelper.start()
    }

猜你喜欢

转载自blog.csdn.net/Mr_ziheng/article/details/109618799