Sto costruendo un'applicazione GPS Android che ottiene i luoghi più vicini in base alla posizione corrente dell'utente.Come posso impedire all'utente di attendere a lungo per ottenere una correzione della posizione?
Questo è ciò che la mia applicazione fa:
- Controllare se GPS o rete è disponibile
- Se nessuno dei due è disponibile, allora non fare nulla. Altrimenti, prima controlliamo il GPS se è lì, se no, controlliamo la rete.
- Dopo aver utilizzato uno di questi, otteniamo la posizione corrente e quindi la inviamo al server.
- Una volta recuperati i dati dal server e aggiornato l'interfaccia utente, smettiamo di ascoltare ulteriori aggiornamenti di posizione. Una volta è sufficiente, fino a quando non premono il pulsante di aggiornamento che ricomincia da capo.
quello che spero di fare:
Se il GPS o la rete non riesce a recuperare una posizione, ad esempio, 2 minuti, poi si passa fornitori. Non vogliamo che l'utente attenda troppo a lungo.
Sarebbe anche bello poter utilizzare entrambi i provider e quindi ottenere il più preciso da quello. Ho dato un'occhiata a http://developer.android.com/guide/topics/location/strategies.html e ho visto il metodo isBetterLocation. Come integrare questo metodo nella mia applicazione? Ho difficoltà a capire come, dove e quando dovrebbe essere chiamato. Suppongo che isBetterLocation() richieda di chiamare sia la rete che il GPS allo stesso tempo. Sarebbe bello che la mia applicazione ascoltasse entrambi per la precisione. Come faccio a fare questo? Cosa succede se uno di loro non è disponibile?
Ecco le parti del mio codice:
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);
}
}
Questo è il metodo onLocationChanged
. Ottengo i valori lat/lng e poi li mando sul mio server e poi faccio cose appropriate con esso.
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);
}
Hai visto questo ?: http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html. E l'app di esempio per le protezioni ?: https://code.google.com/p/android-protips-location/ –
Il provider di rete non è preciso, ma restituisce la posizione in meno di un secondo – Reno
Ciao Reno, grazie. Comprendo che il GPS e la rete differiscono in termini di accuratezza e velocità e questo mi porta alla mia domanda, come faccio a implementare una funzione in base alla quale, se entrambi i provider sono disponibili, ottengo la posizione in base a uno dei provider, preferibilmente GPS perché è il più preciso, quindi se una correzione non viene trovata dopo x quantità di tempo, provo a passare al provider di rete, se è acceso. –