данные местоположения нулевые с .getLastLocation () FusedLocationProviderClient - PullRequest
0 голосов
/ 22 декабря 2018

Я получаю координаты с помощью FusedLocationProviderClient в моем приложении одним нажатием кнопки для сохранения в базе данных.Проблема в том, что когда я перезагружаю телефон или эмулятор, .getLastLocation() становится пустым, и мне нужно в другой раз нажать кнопку, которую я заказываю, чтобы это работало.Есть ли способ заставить получить текущую позицию, если значение location from .lastKnownPosition() равно нулю?

// Google fused location client for GPS position
private FusedLocationProviderClient flpc;
// Vars to store GPS info
public Double latitude, longitude;
public Float accuracy;


// Google Fused Client for location
public void getLocation() {
    // FusedLocationProviderClient
    flpc = LocationServices.getFusedLocationProviderClient(context);
    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ......
        return;
    }

    // Get the latest position from device
    Task<Location> task = flpc.getLastLocation();

    task.addOnSuccessListener(new OnSuccessListener<Location>() {
        @Override
        public void onSuccess(Location location) {
            if(location!=null) {
                latitude = location.getLatitude();
                longitude = location.getLongitude();
                accuracy = location.getAccuracy();
            }
        }
    });
}

В моем обработчике кнопок я вызываю getLocation() и использую широту, долготу и точность для сохранения вбаза данных.

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Когда телефон перезагружается, последнее кэшированное местоположение теряется, поэтому, если вы не открыли приложение, использующее GPS, например карты Google, или что-то еще, тогда не будет последнего местоположения.

Никогда не должно бытьМестоположение возвращается к вам, вы всегда должны предполагать, что оно может быть нулевым.

Если вы хотите получить местоположение, вам просто нужно использовать LocationCallback, как @tenprint сказано в этой теме.

Ссылки по этой ссылке

Android получить местоположение становится пустым после перезагрузки телефона

0 голосов
/ 22 декабря 2018

Когда getLastLocation () имеет значение NULL, вам нужно сделать LocationRequest

private LocationRequest locationRequest;
private LocationCallback locationCallback;

...

locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(20 * 1000);
locationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        if (locationResult == null) {
            return;
        }
        for (Location location : locationResult.getLocations()) {
            if (location != null) {
                wayLatitude = location.getLatitude();
                wayLongitude = location.getLongitude();
                txtLocation.setText(String.format(Locale.US, "%s -- %s", wayLatitude, wayLongitude));
            }
        }
    }
};

Если вам не нужны постоянные обновления, вы можете удалить запрос, как только вы его получили.

mFusedLocationClient.removeLocationUpdates(locationCallback);

Подробнее здесь: https://medium.com/@droidbyme/get-current-location-using-fusedlocationproviderclient-in-android-cb7ebf5ab88e

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...