getLastKnownLocation returnând NULL (Programare, Android, Gps)

r0bb077 a intrebat.

Tocmai reușisem să fac acest lucru să funcționeze, dar când am oprit Wifi-ul pentru a vedea dacă pot obține o locație mai precisă folosind GPS-ul, acum îmi aduce un mesaj NullPointer eroare și nu înțeleg de ce.

Codul de mai jos este apelat mai întâi;

 public void onConnected(Bundle dataBundle) {
        connected = true;
        //Request an update from the location client to get current Location details
        mLocationClient.requestLocationUpdates(mLocationRequest,this);
        Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
    }

Care apoi implică apelarea acestei metode

public void onLocationChanged(android.location.Location location) {
        // Report to the UI that the location was updated
        String msg = "Updated Location: " +
                Double.toString(location.getLatitude()) + "," +
                Double.toString(location.getLongitude());
        if(tmp != location.getLatitude())
        {
            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        }
        tmp = location.getLatitude();
    }

Puteți vedea că am două toasturi acolo și că acestea se întorc bine cu coordonatele GPS reale, dar când apelez la codul de mai jos se blochează pe linia noii locații. getLastKnownLocation

public String getLocation()
    {
        // Get the location manager
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String bestProvider = locationManager.getBestProvider(criteria, false);
        android.location.Location location = locationManager.getLastKnownLocation(bestProvider);
        Double lat,lon;
        DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date = new Date();
        try {
            lat = location.getLatitude ();
            lon = location.getLongitude ();
            Toast.makeText(this,""+lat.toString()+"-"+lon.toString(),Toast.LENGTH_SHORT).show();
            return new LatLng(lat, lon).toString();
        }
        catch (NullPointerException e){
            Toast.makeText(this,"HELL-NO",Toast.LENGTH_SHORT).show();
            Log.e("HELL-NO","n",e);
            e.printStackTrace();
            return null;
        }
    }

Nu înțeleg de ce atunci când încerc să recuperez locația, care pare să fi fost recuperată în metoda onLocationChanged apare doar un indicator nul.

Comentarii

  • amestecați noua api cu cea veche pentru getLastLocation urmați acest stackoverflow.com/a/48033659/4997704 –  > Por Binesh Kumar.
4 răspunsuri
tyczj

amestecați API-urile de locație noi și vechi împreună când nu ar trebui să nu.

pentru a obține ultima locație cunoscută tot ce trebuie să faceți este să apelați

mLocationClient.getLastLocation();

odată ce serviciul de localizare a fost conectat.

Citiți cum se utilizează noul API de localizare

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

Comentarii

  • Noroc @tyczj, nu știam că există o „nouă” API, mulțumesc încă o dată! –  > Por r0bb077.
Troy Zuroske

Am schimbat pur și simplu

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) to 
locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);

Acest lucru a rezolvat soluția pentru mine. Fragmentul complet:

map  = ((MapFragment) getFragmentManager().
            findFragmentById(R.id.map)).getMap();

    map.setMyLocationEnabled(true);

    locationManager = (LocationManager)getSystemService
            (Context.LOCATION_SERVICE); 
    getLastLocation = locationManager.getLastKnownLocation
            (LocationManager.PASSIVE_PROVIDER);
    currentLongitude = getLastLocation.getLongitude();
    currentLatitude = getLastLocation.getLatitude();

    currentLocation = new LatLng(currentLatitude, currentLongitude); 

Sper că vă ajută.

Comentarii

  • funcționează pentru mine, dar care este diferența dintre GPS_PROVIDER și PASSIVE_PROVIDER ? –  > Por Aishwat Singh.
  • @TroyZuroske Aveți vreo idee de ce furnizorul pasiv rezolvă această problemă? Îmi pare rău pentru bump. A funcționat și pentru mine, mulțumesc! –  > Por Kevin Van Ryckegem.
  • nu funcționează…. Locație locație = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); Log.d(TAG, „OnRes:lastknown:” + locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER)); Log.d(TAG, „OnRes:lastknown:” + location); îmi dă null în logcat –  > Por Aalap Patel.
Khalid Taha

încercați acest cod:

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;
}

The_Martian

M-am luptat mult timp cu acesta. Dar Google tocmai a venit cu o soluție.

googleMap.getMyLocation();

pentru a obține locația punctului albastru pe api V2.

Tags:,