Lograr un posicionamiento de precisión diferente en Android (basado en Web y GP)
1. Obtenga el administrador de servicios de ubicación LocationManager
//Definiciones de variables
LocationManager privado LocationManager;
// en onCreate(). Obtenga LocationManager en el método.
locationManager = (LocationManager) this
.getSystemService(Context.LOCATION_SERVICE)
2. Activa la supervisión del servicio de ubicación
Con LocationManager. , podemos comenzar a escuchar los cambios de ubicación. Usamos el método en LocationManager:
requestLocationUpdates(String
proveedor, long minTime, float minDistance, LocationListener
oyente)
para Configure el oyente.
En primer lugar debemos prestar atención al primer parámetro. Existen dos opciones para el valor de este parámetro, que son
En primer lugar debemos prestar atención al. primer parámetro El valor de este parámetro es Las dos opciones son: LocationManager.NETWORK_PROVIDER y LocationManager.GPS_PROVIDER La primera se utiliza para obtener la ubicación en la red móvil, con menor precisión, pero la segunda se utiliza para obtener la. ubicación usando GPS, y este último usa GPS para posicionamiento, la precisión es alta, pero generalmente toma entre 10 y 60 segundos comenzar el primer posicionamiento. Si está en interiores, es básicamente imposible posicionarse.
Estos dos proveedores son esencialmente complementarios. En este tutorial, activaremos ambos proveedores al mismo tiempo, pero el oyente basado en red móvil se detendrá después de ejecutarse solo una vez, mientras que el oyente basado en GPS lo hará. El oyente continuará hasta que el usuario deje de escuchar.
El fragmento de código es el siguiente:
Primero, declararemos una clase interna de escucha, que se usará para ambos modos de escucha.
También se declarará una variable para registrar la ubicación actual
clase privada MyLocationListener implements LocationListener {
Ubicación currentLocation;
@Override
public void onLocationChanged(Ubicación) {
if (Ubicación actual! = nulo) {
if (isBetterLocation(ubicación, Ubicación actual)) {
currentLocation = ubicación;
showLocation(ubicación);
} else {
Toast.makeText(getApplicationContext(), "no muy bueno", Toast. LENGTH_SHORT) .show();
}
} else {
ubicación actual = ubicación;
mostrar ubicación(ubicación); p>
}
/Eliminar oyentes basados en LocationManager.NETWORK_PROVIDER
if ( LocationManager.NETWORK_PROVIDER.equals(location.getProvider())){
if (ActivityCompat.checkSelfPermission( getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED amp; ActivityCompat.checkSelfPermission( getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { p>
// TODO: considere llamar aquí
// ActivityCompat#requestPermissions
// para solicitar los permisos faltantes y luego recargar
// public void onRequestPermissionsResult( int requestCode, String[] permisos,
// int[] GrantResults)
// para manejar la situación en la que el usuario otorga permisos. Para obtener más información, consulte la documentación de ActivityCompat# requestPermissions
//return;
}
locationManager.removeUpdates(this).
removeUpdates(this);
}
}
}
@Override
public void onStatusChanged(String s, int i. Paquete paquete) {