Red de conocimiento informático - Conocimiento informático - Lograr un posicionamiento de precisión diferente en Android (basado en Web y GP)

Lograr un posicionamiento de precisión diferente en Android (basado en Web y GP)

Las clases relacionadas en los servicios de ubicación de Android se encuentran básicamente en el paquete android.location, que se explicará a continuación.

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);

}

/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) {

// 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) {