android 百度定位直接可以用

复制粘贴直接可以用

class LocationUtils {
    private var mLocationClient: LocationClient? = null
    private val myListener =
        MyLocationListener()

    fun createLocation(): LocationUtils {
        initData()
        return this
    }

    private fun initData() {
        mLocationClient = LocationClient(RMApplication.application)

        mLocationClient!!.registerLocationListener(myListener)
        val option = LocationClientOption()
        option.locationMode = LocationClientOption.LocationMode.Hight_Accuracy

        option.setIsNeedAddress(true)

        option.isOpenGps = true

        option.setIgnoreKillProcess(true)

        option.SetIgnoreCacheException(false)

        option.setWifiCacheTimeOut(5 * 60 * 1000)

        mLocationClient!!.locOption = option

    }

    fun start() {
        if (mLocationClient != null) {
            mLocationClient!!.start()

        }
    }

    interface ICallbackLocationListener {
        fun onReceiveLocation(locatinBean: LocationBean?)
    }

    private var callbackLocationListener: ICallbackLocationListener? = null
    fun setListener(callbackListener: ICallbackLocationListener?): LocationUtils {
        callbackLocationListener = callbackListener
        return this
    }

    inner class MyLocationListener : BDAbstractLocationListener() {
        override fun onReceiveLocation(location: BDLocation) {

            setData(location)
        }

        override fun onLocDiagnosticMessage(i: Int, i1: Int, s: String) {
            super.onLocDiagnosticMessage(i, i1, s)
            initLocation()
        }
        private fun setData(location: BDLocation) {
            val locationWhere = location.locationWhere
            val latitude = location.latitude
            val longitude = location.longitude
            val radius = location.radius
            val coorType = location.coorType

            val errorCode = location.locType

            val addr = location.addrStr
            val country = location.country
            val province = location.province
            val city = location.city
            val district = location.district
            val street = location.street
            val locType = location.locType
            if (locType == 61 || locType == 161) {
                val locationBean = LocationBean()
                locationBean.crawllatitude = latitude
                locationBean.crawllongitude = longitude
                locationBean.coorType = coorType
                locationBean.errorCode = errorCode
                locationBean.positioningAccuracy = radius
                locationBean.crawlsite = addr
                locationBean.country = country
                locationBean.crawlprovinces = province
                locationBean.town = city
                locationBean.district = district
                locationBean.neighborhood = street
                locationBean.locationWhere = locationWhere
                locationBean.locType = locType
                if (callbackLocationListener != null) {
                    callbackLocationListener!!.onReceiveLocation(locationBean)
                }
            } else {
                initLocation()
            }
            if (mLocationClient != null) {
                mLocationClient!!.stop()
            }
        }
    }



    fun initLocation() {
        GPLocationHelper.getInstance(RMApplication.application)
            ?.initLocation(object : LocationLinstener {
                override fun UpdateLocation(onwegin: Location?) {
                    GPLocationHelper.getInstance(RMApplication.application)
                        ?.removeLocationUpdatesListener()
                }

                override fun UpdateStatus(
                    oewiobwe: String?,
                    newineiwof: Int,
                    ionwrinvjiw: Bundle?
                ) {
                }

                override fun UpdateLastLocation(jkrbewofnw: Location?) {
                    locationGeocoder(jkrbewofnw!!.latitude, jkrbewofnw.longitude)
                }
            })
    }

    fun locationGeocoder(latitude: Double, longitude: Double) {
        val locationBean = LocationBean()
        locationBean.crawllatitude = latitude
        locationBean.crawllongitude = longitude
        val geocoder =
            Geocoder(RMApplication.application)
        val flag = Geocoder.isPresent()
        if (flag) {
            try {
                val addresses =
                    geocoder.getFromLocation(latitude, longitude, 1)
                if (addresses.size > 0) {
                    val address = addresses[0]

                    if (address != null) {
                        val countryName = address.countryName
                        val countryCode = address.countryCode
                        val adminArea = address.adminArea
                        val locality = address.locality
                        val subAdminArea = address.subAdminArea
                        val featureName = address.featureName
                        locationBean.country = countryName
                        locationBean.crawlprovinces = adminArea
                        locationBean.town = locality
                        locationBean.district = subAdminArea
                        locationBean.neighborhood = featureName

                    } else {

                    }
                }
            } catch (e: IOException) {
            } catch (e: Exception) {
            }
        }
        if (callbackLocationListener != null) {
            callbackLocationListener!!.onReceiveLocation(locationBean)
        }
    }

    companion object {
        private var locationUtils: LocationUtils? = null
        const val IDENTITY_CODE = 1
        const val ESSENTIAL_CODE = 2
        const val SUBMIT_CODE = 3

        @get:Synchronized
        val instance: LocationUtils?
            get() {
                if (locationUtils == null) {
                    locationUtils = LocationUtils()
                }
                return locationUtils
            }
    }
}

 

interface LocationLinstener {
    fun UpdateLocation(location: Location?)
    fun UpdateStatus(
        str: String?,
        int: Int,
        bundle: Bundle?
    )

    fun UpdateLastLocation(location: Location?)
}

 

 

class GPLocationHelper(private val mContext: Context) {
    private var mLocationCallback: LocationLinstener? = null
    private var myLocationListener: MyLocationListener? =
        null
    private val mLocationManager: LocationManager?


    fun initLocation(locationCallback: LocationLinstener) {
        var location: Location? = null
        mLocationCallback = locationCallback
        if (myLocationListener == null) {
            myLocationListener = MyLocationListener()
        }

        if (Build.VERSION.SDK_INT >= 23 && ActivityCompat.checkSelfPermission(
                mContext,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                mContext,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            return
        }
        if (mLocationManager != null) {
            if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
                location =
                    mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
                if (location != null) {
                    locationCallback.UpdateLastLocation(location)
                }
                mLocationManager.requestLocationUpdates(
                    LocationManager.NETWORK_PROVIDER,
                    0, 0f, myLocationListener
                )
            } else {
                location =
                    mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
                if (location != null) {
                    locationCallback.UpdateLastLocation(location)
                }
                mLocationManager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER,
                    1000, 50f, myLocationListener
                )
            }
        }
    }

    private inner class MyLocationListener : LocationListener {

        override fun onStatusChanged(
            trbrvsf: String, gfsafda: Int,
            tnrbrfdsf: Bundle
        ) {
            if (mLocationCallback != null) {
                mLocationCallback!!.UpdateStatus(trbrvsf, gfsafda, tnrbrfdsf)
            }
        }


        override fun onProviderEnabled(nrtbrdv: String) {
        }


        override fun onProviderDisabled(rntbvds: String) {
        }


        override fun onLocationChanged(nrbfdv: Location) {
            if (mLocationCallback != null) {
                mLocationCallback!!.UpdateLocation(nrbfdv)
            }
        }
    }


    fun removeLocationUpdatesListener() {

        if (Build.VERSION.SDK_INT >= 23 && ActivityCompat.checkSelfPermission(
                mContext,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                mContext,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            return
        }
        mLocationManager?.removeUpdates(myLocationListener)
    }

    companion object {
        @Volatile
        private var uniqueInstance: GPLocationHelper? = null

        fun getInstance(context: Context): GPLocationHelper? {
            if (uniqueInstance == null) {
                synchronized(LocationUtils::class.java) {
                    if (uniqueInstance == null) {
                        uniqueInstance = GPLocationHelper(context)
                    }
                }
            }
            return uniqueInstance
        }
    }

    init {
        mLocationManager = mContext
            .getSystemService(Context.LOCATION_SERVICE) as LocationManager
    }
}


class LocationBean {
    var crawllatitude = 0.0
    var crawllongitude = 0.0
    var positioningAccuracy = 0f
    var coorType: String? = null
    var errorCode = 0
    var locationWhere = 0
    var crawlsite: String? = null
    var country: String? = null
    var crawlprovinces: String? = null
    var town: String? = null
    var district: String? = null
    var neighborhood: String? = null
    var locType = 0

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值