Search code examples
androidkotlingeolocationlocationlocationmanager

requestLocationUpdates doesn't call the locationCallback


I started to make a Kotlin app and i'm trying to access the users location. It's all my app must do. However, the function "client.requestLocationUpdates(locationRequest, locationCallback, null)" never calls my locationCallback method and I don't know why. I already debug this code, it execute the "client.requestLocationUpdates(locationRequest, locationCallback, null)" line but it never execute my LocationCallbackFunction. Here's my code:

class MainActivity : AppCompatActivity() {
    private lateinit var client : FusedLocationProviderClient
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        client = LocationServices.getFusedLocationProviderClient(this)
    }


    override fun onResume() {
        super.onResume()
        var codigo = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
        codigo = 0
        when (codigo) {
            ConnectionResult.SERVICE_MISSING,
            ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED,
            ConnectionResult.SERVICE_DISABLED -> {
                GoogleApiAvailability.getInstance().getErrorDialog(this, codigo, 0, DialogInterface.OnCancelListener {
                    fun onCancel(dialog: DialogInterface?) {
                        finish();
                    }
                }).show()
            }
            ConnectionResult.SUCCESS -> {
                println("Google Play Service is working!")
            }
        }

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            println("This app hasn't permission to access users location")
            return;
        }


        val locationRequest = LocationRequest.create()
        val fifteen = 15 * 1000.toLong()
        val five = 5 * 1000.toLong()
        locationRequest.interval = fifteen
        locationRequest.fastestInterval = five
        locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
        var builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest)
        var settingsClient = LocationServices.getSettingsClient(this)
        settingsClient.checkLocationSettings(builder.build())
            .addOnSuccessListener(
                fun (locationSettingsResponse : LocationSettingsResponse) {
                    println("locationSettingsResponse.locationSettingsStates.isGpsPresent = ${locationSettingsResponse.locationSettingsStates.isGpsPresent}")
                    println("locationSettingsResponse.locationSettingsStates.isGpsUsable = ${locationSettingsResponse.locationSettingsStates.isGpsUsable}")

                }
            )
            .addOnFailureListener(

                fun (e: Exception) : Unit {
                    if (e is ResolvableApiException) {
                        try {
                            var resolvable : ResolvableApiException = e
                            resolvable.startResolutionForResult(this, 10);
                        } catch (e1 : IntentSender.SendIntentException ) {
                        }
                    }
                }
            )


        val locationCallback : LocationCallback? = object : LocationCallback() {
            override fun onLocationResult(locationResult : LocationResult?) {
                if (locationResult == null) {
                    println("the value is null")
                    return;
                }

                for ( location : Location in locationResult.getLocations()) {
                    location.getLatitude()
                    println("latitude=" + location.getLatitude());
                    textoPrincipal.text = location.getLatitude().toString()
                }
            }
        }

        client.requestLocationUpdates(locationRequest, locationCallback, null)
    }

}

That is the entire content of my activity


Solution

  • I solved this, and I don't know how, this exactly code is running perfectly right now. It was a error in my Android Studio configuration, I guess