getLastKnownLocation возвращает null


Я прочитал несколько вопросов об этом, но я не совсем нашел ответ, который мне нужен.

Итак, дело в том, что у меня есть моя карта настроена, и я хочу получить мое текущее местоположение GPS. Я проверил, что мои переменные не являются нулевыми, но все же мой результат от:

getLastKnownLocation(provider, false);

дает мне значение null, так что это, где мне нужна помощь. Я добавил разрешения для грубого + прекрасное расположение. Но у меня обычно отключены все виды сетевых данных для моего телефона, потому что я не очень счастлив о непредсказуемых расходах потока данных в моем телефонном счете. Поэтому у меня есть только Wi-Fi включен и подключен для этого теста.

есть ли что-нибудь еще, что мне нужно включить, чтобы это было возможно? Я думаю, что Wi-Fi должен быть достаточным?

5 55

5 ответов:

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

LocationManager mLocationManager;
Location myLocation = getLastKnownLocation();

private Location getLastKnownLocation() {
    mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
    List<String> providers = mLocationManager.getProviders(true);
    Location bestLocation = null;
    for (String provider : providers) {
        Location l = mLocationManager.getLastKnownLocation(provider);
        if (l == null) {
            continue;
        }
        if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
            // Found best last known location: %s", l);
            bestLocation = l;
        }
    }
    return bestLocation;
}

вы смешиваете новый и старый API местоположения вместе, когда вы не должны.

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

compile "com.google.android.gms:play-services-location:11.0.1"
mLocationClient.getLastLocation();

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

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

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

 private void getLastLocationNewMethod(){
    FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
    mFusedLocationClient.getLastLocation()
            .addOnSuccessListener(new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    // GPS location can be null if GPS is switched off
                    if (location != null) {
                        getAddress(location);
                    }
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Log.d("MapDemoActivity", "Error trying to get last GPS location");
                    e.printStackTrace();
                }
            });
}

вы пытаетесь получить кэшированное местоположение от поставщика сети. Вы должны подождать несколько минут, пока не получите действительное исправление. Поскольку кэш поставщика сети пуст, вы, очевидно, получаете там null..

добавить этот код

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
     return;
}

до функции:

locationManagerObject.requestLocationUpdates(LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new LocationListener()) а также функции: locationManagerObject.getLastKnownLocation(LocationManager.GPS_PROVIDER)

заменить строку ur на

Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);