Localización de la ubicación: Servicio de ubicación de Google Play o API de ubicación de la plataforma Android
Estoy tratando de obtener la ubicación de los usuarios para mi nueva aplicación de navegación. Quiero comprobar la ubicación de los usuarios con frecuencia y tiene que ser preciso. Utilizo el código siguiente de la muestra para conseguir la localización.
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(); } }
Pero cordinates de la localización no están poniendo al día mientras que me muevo, consigo un valor constante siempre … ¿hay alguna manera mejor de conseguir la localización? De acuerdo con los documentos de Android puedo utilizar el servicio de ubicación de Google Play o las API de ubicación de la plataforma Android para esto. Comprobé el código de muestra para ambos y implementa la interfaz LocationListener para obtener la ubicación del usuario. Entonces, ¿cuál es la diferencia real entre ellos?
- Obtener usuario actual Ubicación android
- Mapview NullPointerException android
- Android: Mock Location cambia de nuevo a Original después de unos segundos
- ¿Es posible saber mi ubicación vino de gps o glonass?
- Cómo configurar "Tipos" en Google Place PlacePicker en Android?
- No se puede encontrar la clase com.google.android.gms.location.LocationClient (android)
- ¿Quién está activando onLocationChanged en LocationManager en Android?
- Cómo deshabilitar Android LocationListener cuando se cierra la aplicación
- La API de localización de servicios de Google Play / setSmallestDisplacement no funciona
- Compruebe si la geolocalización ha sido falsificada
- Android LocationListener Cambio de GPS a la red
- ¿Cómo puedo obtener la ubicación GPS actual mediante programación en Android?
- Descubra la velocidad del usuario en android Utilizando GPS
Absolutamente utilizar los nuevos servicios de localización de google play. Trabajan mucho mejor en el interior que el antiguo gerente de ubicación. He creado una muestra que utiliza los nuevos servicios de localización de google play y funciona en segundo plano periódicamente. Echale un vistazo:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android
Cuando estaba trabajando con él, me encontré con 2 buenas fuentes:
-
La publicación del blog: Android Location Fused Provider . Incluye un gran tutorial completo sobre el uso de FusedLocationProviderApi para obtener ubicación en Android.
-
Las respuestas sobre la siguiente clase de LocationClient de Android están obsoletas pero se usan en la pregunta de documentación .
Básicamente, ambos hablan de los pasos similares mencionados en la sesión de Google I / O, enlace al que se menciona en una de las respuestas:
-
En primer lugar, para obtener una instancia de
GoogleClientApi
, como:GoogleClientApi googleApiClient = new GoogleApiClient.Builder(locationActivity) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build();
-
A continuación, para llamar a
.connect()
en él como:googleApiClient.connect();
-
A continuación, en la devolución de llamada
onConnected
, obtenga la última ubicación o incluso puede solicitar las actualizaciones de ubicación según su necesidad, por ejemplo:LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
Si desea actualizaciones de ubicación de solicitud, puede utilizar la llamada requestLocationUpdates .
Espero eso ayude.
- Cómo setSupportActionBar en una vista que extiende LifecycleActivity
- ¿Cómo puedo usar IDs duplicados en diferentes diseños?