Как получить текущее местоположение в Android 7?

Я пытаюсь получить текущее местоположение в Android, и все в порядке, когда я использую Android M или ниже, но когда я запускаю свое приложение на Android N, местоположение равно null, и когда я хочу получить широту, оно возвращает 0. здесь мой код

 try {

            if (!isGPSEnabled && !isNetworkEnabled) {
             } else {
                this.canGetLocation = true;
                 if (isNetworkEnabled) {
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("Network", "Network");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                 if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager
                                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

person Behnam Eskandari    schedule 03.09.2017    source источник


Ответы (2)


и это нормально, когда я использую Android M или ниже

Нет. getLastKnownLocation() часто возвращает null во всех версиях Android.

getLastKnownLocation() — это оптимизация. Используйте его, но будьте готовы полагаться на onLocationChanged(), когда getLastKnownLocation() возвращает null или устаревшее значение.

Это описано в документации, а также в книгах и курсах. по разработке приложений для Android.

person CommonsWare    schedule 03.09.2017
comment
у меня это сработало на Android L, onLocationChangeListener у меня тоже не работает на Android 7 @CommonsWare - person Behnam Eskandari; 03.09.2017
comment
@BehnamEskandari: Этот пример приложения успешно получает местоположение на Google Pixel под управлением Android 7.1. Для местоположений в США будет показан прогноз погоды для этого места. - person CommonsWare; 03.09.2017
comment
Главное, что нужно понимать о getLastKnownLocation(), это то, что если вы недавно включили определение местоположения на устройстве или перезапустили устройство, это ВСЕГДА будет возвращать значение null, пока местоположение не будет получено от вызывающего провайдера (GPS, Сеть) из ЛЮБОГО приложения, не только твое. Тот факт, что вы позвонили requestLocationUpdates(), не означает, что вы сразу определились с местоположением. Кроме того, даже если вы получили местоположение от getLastKnownLocation(), это не значит, что оно было недавним. Это могут быть минуты или часы. - person Pablo Baxter; 06.09.2017

Чтобы получить последнее известное местоположение, все, что вам нужно сделать, это позвонить

mLocationClient.getLastLocation(); после подключения службы определения местоположения.

прочитайте, как использовать новый API определения местоположения

http://developer.android.com/training/location/retrieve-current.html#GetLocation

person behzad abbasi    schedule 03.09.2017