Android - Получить текущее местоположение не работает

У меня проблема с получением объекта LocationManager. Код должен работать со всеми Android API, но в ходе моих тестов я обнаружил, что LocationManager не равен нулю только в 25 API.

   fun invokeLocalization(): Location? {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val locationManager = ctx.applicationContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager
        if ( ctx.checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            var bestLocation: Location? = null
            for (provider in locationManager.getProviders(true)) {
                val location = locationManager.getLastKnownLocation(provider) ?: continue
                if (bestLocation == null || location.accuracy < bestLocation.accuracy) bestLocation = location
            }
            return bestLocation
        } else {
            (ctx as AddAlertActivity).requestPermissions(arrayOf(LocationManager.GPS_PROVIDER),PackageManager.PERMISSION_GRANTED)
            return locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
        }
    }
    return null
}

И мой манифест

<uses-permission android:name = "android.permission.INTERNET" />
<uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name = "android.hardware.location.gps" />

Premission включен для локализации в настройках Android. Android - Получить текущее местоположение не работает

Буду признателен за помощь.

0
0
229
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте FusedLocation API из Google, который получил обновленное местоположение или последнее известное местоположение

https://developers.google.com/location-context/fused-location-provider/

Я меняю код как вы написали. И он подключен, потому что он работает на моем мобильном телефоне, но на эмуляторах "он" возвращает ноль. await((ctx as AddAlertActivity).fusedLocationClient.lastLocation .addOnSuccessListener { location = it })

mkubasz 06.06.2018 12:18

в эмуляторе вы указали произвольную широту в его настройках.

Parth Suthar 06.06.2018 12:29

Да, я знаю. Но я думал, что объект должен вернуть позицию по умолчанию. Теперь работает. Спасибо!

mkubasz 06.06.2018 12:39

Другие вопросы по теме