lastKnownLocation всегда возвращает ноль, когда GPS выключен

Я использую API службы Google, LocationServices.FusedLocationApi, чтобы найти текущее, а затем обновленное местоположение пользователя. Я тестировал на эмуляторе, а также на реальном устройстве, и обнаружил, что если я отключу GPS LocationServices.FusedLocationApi.getLastLocation(), он всегда возвращает значение null, однако я получаю действительное значение, если включаю GPS. Вот код, который я использую:

private GoogleApiClient mGoogleApiClient;
private Location mLastKnownLocation;
mLastKnownLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

if (mLastKnownLocation != null) {
    Log.i(TAG, String.valueOf(mLastKnownLocation.getLatitude()));
    Log.i(TAG, String.valueOf(mLastKnownLocation.getLongitude()));
}

LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, createLocationRequest(), this);

Я что-то упустил здесь? Заранее спасибо.


person Pratik    schedule 14.10.2015    source источник


Ответы (1)


Я думаю, вы должны сначала проверить, есть ли на вашем устройстве GPS, используя это:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            buildAlertMessageNoGps();
        }

 private void buildAlertMessageNoGps() {
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
                .setCancelable(false)
                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                        startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                        dialog.cancel();
                    }
                });
        final AlertDialog alert = builder.create();
        alert.show();
    }

А затем используйте LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient).

Для получения дополнительной информации и кода см. здесь.

person bjiang    schedule 15.10.2015
comment
@bijang Спасибо за ответ и подробный код. Я пытаюсь понять, что если GPS отключен, что происходит? В настоящее время, если GPS отключен, он не показывает мое местоположение, как я могу это исправить? - person Pratik; 15.10.2015
comment
Два способа узнать ваше текущее местоположение: 1. Из GPS вам нужно иметь GPS и включить его. 2. От Network Location Provider, но это не точность, чем GPS. Подробнее см. здесь. - person bjiang; 15.10.2015
comment
У меня возникла проблема, у меня сложилось впечатление, что провайдер сетевого определения местоположения будет работать, даже если местоположение отключено. Но это не тот случай. Местоположение должно быть включено, если мне нужно найти местоположение (другой режим местоположения). Спасибо за помощь - person Pratik; 16.10.2015