Попытка получить местоположение с помощью LocationManager.getCurrentLocation всегда возвращает значение null?

avatar
Olli
8 августа 2021 в 18:24
134
1
0

Итак, у меня есть приложение с несколькими фрагментами. Каждый раз, когда пользователь переходит к новому фрагменту, я хочу сохранить местоположение устройства. Все фрагменты находятся под одной активностью.

Вот что я сейчас делаю:

в моей деятельности:

    fun getLocation(context: Context, consumer: Consumer<Location?>): Boolean {
        return if (checkLocationPermission()) {
            mService.getLocation(context, consumer)
        } else {
            false
        }
    }

в моем LocationService (locationService привязан к моей активности)

    @RequiresPermission(value = "android.permission.ACCESS_FINE_LOCATION")
    fun getLocation(context: Context, consumer: Consumer<Location?>): Boolean {
        return if (packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION)
            && manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

            manager.getCurrentLocation(
                LocationManager.GPS_PROVIDER,
                null,
                ContextCompat.getMainExecutor(context),
                consumer)
            true
        } else {
            false
        }
    }

Наконец, вот как я запрашиваю местоположение в своем фрагменте. В моем фрагменте:

    val a = requireActivity() as MyActivity
    a.getLocation(a) { loc -> 
        // this callback always takes about 30 seconds to execute, and then loc is null
    }

Я тестирую это на своем телефоне Pixel 3a. Я нахожусь в помещении, поэтому не знаю, влияет ли это на GPS, но он может показать мое местоположение, по крайней мере, на картах Google.

Я также пытался протестировать это на эмуляторе (Pixel 2 API 30), и тот действительно возвращает местоположение, но это всегда местоположение по умолчанию (Пало-Альто, Googleplex), даже если я меняю местоположение устройства. в настройках эмулятора.

Источник

Ответы (1)

avatar
Akshat Tiwari
8 августа 2021 в 23:54
0

Вы должны использовать Fused Location Provider для получения местоположения!

Olli
9 августа 2021 в 09:10
0

Можете ли вы уточнить, почему?