requestLocationUpdates не вызывает locationCallback

Я начал делать приложение Kotlin и пытаюсь получить доступ к местоположению пользователей. Это все, что должно делать мое приложение. Однако функция client.requestLocationUpdates (locationRequest, locationCallback, null) никогда не вызывает мой метод locationCallback, и я не знаю почему. Я уже отлаживаю этот код, он выполняет строку client.requestLocationUpdates (locationRequest, locationCallback, null), но никогда не выполняет мою LocationCallbackFunction. Вот мой код:

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)
    }

}

Это все содержание моей деятельности


person Capybara    schedule 18.05.2020    source источник
comment
Вы должны requestLocationUpdates, когда checkLocationSettings успешно, и убедитесь, что вы включаете службу определения местоположения и запрашиваете все разрешения для определения местоположения.   -  person Công Hải    schedule 18.05.2020
comment
Я попытался поставить requestLocationUpdates в CheckLocationSettings, но это не сработало. Я думаю, что мой код уже запрашивает все разрешения для местоположения в .addOnFailureListener в settingsClient.checkLocationSettings (builder.build ())   -  person Capybara    schedule 18.05.2020


Ответы (1)


Я решил эту проблему и не знаю как, именно этот код сейчас работает отлично. Думаю, это была ошибка в моей конфигурации Android Studio.

person Capybara    schedule 20.05.2020