Ich baue eine GPS-Android-Anwendung, die die nächstgelegenen Orte basierend auf dem aktuellen Standort des Benutzers ermittelt. DieseWie kann ich den Benutzer, der lange auf eine Standortkorrektur wartet, anhalten?
ist, was meine Anwendung funktioniert:
- Überprüfen Sie, ob GPS oder Netzwerk verfügbar ist
- Wenn weder steht dann nichts tun. Sonst suchen wir zuerst nach GPS, wenn es dort ist, andernfalls suchen wir nach Netzwerk.
- Nachdem Sie einen von ihnen verwendet haben, erhalten wir den aktuellen Standort und senden ihn an den Server.
- Sobald wir Daten vom Server abrufen und die Benutzeroberfläche aktualisieren, hören wir auf weitere Standortaktualisierungen zu hören. Einmal ist genug, bis sie den Refresh-Button drücken, der diesen erneut startet.
Was ich hoffe, zu tun:
Wenn GPS oder Netzwerk einen Standort abzurufen ausfällt, beispielsweise 2 Minuten, dann schalten wir Anbieter. Wir möchten nicht, dass der Benutzer zu lange wartet.
Es wäre auch schön, in der Lage zu sein, beide Anbieter zu verwenden und dann die genaueste davon zu bekommen. Ich habe mir http://developer.android.com/guide/topics/location/strategies.html angesehen und ich habe die isBetterLocation Methode gesehen. Wie würde ich diese Methode in meine Anwendung integrieren? Ich habe Probleme zu verstehen, wie, wo und wann es aufgerufen werden sollte. Ich nehme an, dass die isBetterLocation() erfordert, dass ich gleichzeitig Network und GPS anrufe. Es wäre schön für meine Anwendung, beide auf Genauigkeit zu hören. Wie mache ich das? Was ist, wenn einer von ihnen nicht verfügbar ist?
Hier Teile meines Code:
if(!GPSEnabled && !networkEnabled)
{
Toast.makeText(this, "Error: This application requires a GPS or network connection",
Toast.LENGTH_SHORT).show();
}
else
{
if(GPSEnabled)
{
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}
else if(networkEnabled)
{
System.out.println("Getting updates from network provider");
locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
}
}
Mit dieser Methode onLocationChanged
ist. Ich bekomme die lat/lng-Werte und sende sie dann an meinen Server und mache dann entsprechende Sachen damit.
public void onLocationChanged(Location location)
{
//Get coordinates
double lat = (location.getLatitude());
double lng = (location.getLongitude());
Log.d("MainActivity", "got location: " + lat + ": " + lng);
//get nearest locations
new GetLocations().execute(SharedVariables.root + SharedVariables.locationsController + SharedVariables.getNearestMethod + lat + "/" + lng);
// Zoom in, animating the camera after the markers have been placed
map.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 10));
System.out.println("lat = " + lat + ", lng = " + lng);
//Stop listening for updates. We only want to do this once.
locManager.removeUpdates(this);
}
Sie haben dies gesehen ?: http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html. Und die App props App ?: https://code.google.com/p/android-protips-location/ –
Der Netzwerkanbieter ist ungenau, aber es gibt die Position in weniger als einer Sekunde – Reno
Hallo Reno, Danke. Ich verstehe, dass GPS und Netzwerk sich in Genauigkeit und Geschwindigkeit unterscheiden und das bringt mich zu meiner Frage, wie ich ein Feature implementiere, bei dem, wenn einer der Provider verfügbar ist, der Standort auf einem der Provider basiert, vorzugsweise GPS ist am genauesten, wenn nach x Zeit kein Fix gefunden wird, versuche ich, auf den Netzanbieter umzuschalten, wenn er eingeschaltet ist. –