Znajdowanie lokalizacji: usługi lokalizacji Google Play lub interfejsy API lokalizacji Platformy Android

Próbuję uzyskać lokalizację użytkowników dla mojej nowej aplikacji nawigacyjnej. chcę często sprawdzać lokalizację użytkowników i musi być dokładna . Używam poniższego kodu z próbki, aby uzyskać lokalizację .

public class MainActivity extends Activity implements LocationListener {
private LocationManager locationManager;
private String provider;
private TextView a;
private TextView b;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    a = (TextView) findViewById(R.id.a);
    b = (TextView) findViewById(R.id.b);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(provider);

    if (location != null) {
        System.out.println("Provider " + provider + " has been selected.");
        onLocationChanged(location);
    } else {
        a.setText("Location not available");
        b.setText("Location not available");
    }
}

@Override
protected void onResume() {
    super.onResume();
    locationManager.requestLocationUpdates(provider,0, 1, this);
}

@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
}

@Override
public void onLocationChanged(Location location) {
    Double lat =  location.getLatitude();
    Double lng =  location.getLongitude();
    a.setText(String.valueOf(lat));
    b.setText(String.valueOf(lng));
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    Toast.makeText(this, "Enabled new provider " + provider,
            Toast.LENGTH_SHORT).show();

}

@Override
public void onProviderDisabled(String provider) {
    Toast.makeText(this, "Disabled provider " + provider,
            Toast.LENGTH_SHORT).show();
}
}

Ale location cordinates nie aktualizuje się jak się przemieszczam, zawsze dostaję stałą wartość ... czy jest jakiś lepszy sposób na znalezienie lokalizacji ? Zgodnie z Android docs mogę korzystać z usługi lokalizacji Google Play lub API lokalizacji Platformy Android . Sprawdziłem przykładowy kod dla oba i implementuje interfejs LocationListener, aby uzyskać lokalizację użytkownika .więc jaka jest rzeczywista różnica między nimi?

Author: halfdreamer, 2014-01-28

2 answers

Absolutnie korzystać z nowych usług lokalizacji Google play. Pracują dużo lepiej w pomieszczeniach niż stary kierownik lokalizacji. Stworzyłem próbkę, która korzysta z nowych usług lokalizacji google play i działa okresowo w tle. Sprawdź to:

Https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android

 23
Author: nickfox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-11 03:38:25

Kiedy pracowałem z nim, natknąłem się na 2 dobre źródła:

  1. Wpis na blogu: Android Location Fused Provider . Zawiera świetny kompletny samouczek na temat korzystania z FusedLocationProviderApi , aby uzyskać lokalizację w Androidzie.

  2. Odpowiedzi na następujące klasy Android LocationClient są przestarzałe, ale używane w dokumentacji question.

Zasadniczo oba mówią o podobnych krokach, jak wspomniano w Google I / O sesja, do której link jest wymieniony w jednej z odpowiedzi:

  • Po pierwsze, aby uzyskać GoogleClientApi instancję, jak:

    GoogleClientApi googleApiClient = new GoogleApiClient.Builder(locationActivity)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    
  • Następnie wywołać {[4] } na nim jak:

    googleApiClient.connect();
    
  • Następnie w callback onConnected, uzyskać ostatnią lokalizację lub nawet może zażądać aktualizacji lokalizacji zgodnie z potrzebami, np:

    LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
    

    Jeśli chcesz zażądać aktualizacji lokalizacji, możesz użyć wywołania requestLocationUpdates .

Mam nadzieję, że to pomoże.
 3
Author: Shobhit Puri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:53:18