android 系统定位代码

213 阅读1分钟
locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
geocoder = Geocoder(this, Locale.getDefault())
if (ActivityCompat.checkSelfPermission(
        this,
        Manifest.permission.ACCESS_COARSE_LOCATION
    ) != PackageManager.PERMISSION_GRANTED
    && ActivityCompat.checkSelfPermission(
        this,
        Manifest.permission.ACCESS_FINE_LOCATION
    ) != PackageManager.PERMISSION_GRANTED
) {
    ActivityCompat.requestPermissions(
        this,
        arrayOf(
            Manifest.permission.ACCESS_COARSE_LOCATION,
            Manifest.permission.ACCESS_FINE_LOCATION
        ),
        1
    )
    return
}

val criteria =  Criteria()
criteria.accuracy = Criteria.ACCURACY_COARSE;
criteria.isAltitudeRequired = false;//不要求海拔
criteria.isBearingRequired = false;//不要求方位
criteria.isCostAllowed = true;//允许有花费
criteria.powerRequirement = Criteria.POWER_LOW;//低
val providerList = locationManager.getProviders(criteria,true)
// 可以指定优先GPS,再次网络定位
val provider = if (providerList.contains(LocationManager.GPS_PROVIDER)) {
    LocationManager.GPS_PROVIDER;
} else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
    LocationManager.NETWORK_PROVIDER;
} else {
    Toast.makeText(this,"not support location",Toast.LENGTH_LONG).show()
    return;
}

//this 是lisLocationListener 实现之后重写 onLocationChanged
locationManager.requestLocationUpdates(provider, 1000, 0f, this);
override fun onLocationChanged(location: Location) {
    if(PositionUtil.latitude == 0.0 || PositionUtil.longitude == 0.0){
        // 第一次定位
        PositionUtil.updateCurrentPosition(location.latitude,location.longitude)
        vm.getCityWeather(this)
    }
}