как я могу поместить широту и долготу в api waether? (kotlin) - PullRequest
0 голосов
/ 26 апреля 2020

я получил разрешение на местоположение, и я получил текущее rnet местоположение, и я хочу использовать широту и долготу в погоде api, lat и lon внутри метода getlastlocation () вернуть десятичное число, но из метода вернуть null или по умолчанию, как я объявляю переменная внутри класса для получения широты и долготы и размещения темы в погоде api

class MainActivity: AppCompatActivity () {val PERMISSION_ID = 42 lateinit var mFusedLocationClient: FusedLocationProviderClient

var city: String = "semnan,ir"
val API: String = "8118ed6ee68db2debfaaa5a44c832918"
var lat:Double=0.0
var lon:Double=0.0

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
    getLastLocation()
    weatherTask().execute()

}


private fun checkPermissions(): Boolean {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
            ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
        return true
    }
    return false
}
private fun requestPermissions() {
    ActivityCompat.requestPermissions(
            this,
            arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION),
            PERMISSION_ID
    )
}
private fun isLocationEnabled(): Boolean {
    var locationManager: LocationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(
            LocationManager.NETWORK_PROVIDER
    )
}

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
    if (requestCode == PERMISSION_ID) {
        if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
            // Granted. Start getting the location information
        }
    }
}
@SuppressLint("MissingPermission")
private fun getLastLocation() {
    if (checkPermissions()) {
        if (isLocationEnabled()) {

            mFusedLocationClient.lastLocation.addOnCompleteListener(this) { task ->
                var location: Location? = task.result
                if (location == null) {
                    requestNewLocationData()
                } else {
                    lat=location.latitude
                    lon=location.latitude

                    Log.i("latingetlocation" ,"lat is : " + location.latitude.toString())
                    Log.i("loningetlocation" ,"lon is : " + location.longitude.toString())

                }
            }
        } else {
            Toast.makeText(this, "Turn on location", Toast.LENGTH_LONG).show()
            val intent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
            startActivity(intent)
        }
    } else {
        requestPermissions()
    }
}

@SuppressLint("MissingPermission")
private fun requestNewLocationData() {
    var mLocationRequest = LocationRequest()
    mLocationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
    mLocationRequest.interval = 0
    mLocationRequest.fastestInterval = 0
    mLocationRequest.numUpdates = 1

    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
    mFusedLocationClient!!.requestLocationUpdates(
            mLocationRequest, mLocationCallback,
            Looper.myLooper()
    )
}
private val mLocationCallback = object : LocationCallback() {
    override fun onLocationResult(locationResult: LocationResult) {
        var mLastLocation: Location = locationResult.lastLocation

        Log.i("latInmcallback" ,"lat is : " + mLastLocation.latitude.toString())
        Log.i("lonInmcallback" ,"lon is : " + mLastLocation.longitude.toString())

    }
}
...