Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Para utilizar el GPS en Android necesitan solamente una clase en especial, que es la
LocationListener por motivos de orden, se colocara en un paquete aparte, se le colocara el
nombre de utilidadGPS.
Dentro se creara una clase llamada GPSListener y se extiende a LocationListener como se muestra
a continuación.
@Override
public void onProviderEnabled(String provider) {
// Este metodo se ejecuta cuando el GPS es activado
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
if(acciones!=null)
{
switch (status) {
case LocationProvider.AVAILABLE:
Log.d("debug", "LocationProvider.AVAILABLE");
break;
case LocationProvider.OUT_OF_SERVICE:
Log.d("debug", "LocationProvider.OUT_OF_SERVICE");
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
Log.d("debug",
"LocationProvider.TEMPORARILY_UNAVAILABLE");
break;
}
Como se muestra, cada vez que el GPS realiza una acción, el llama cada una de estas funciones,
ahora se le hará una interfase la cual se llamara GPSaccionesListener y se implementara como se
muestra a continuación.
public interface GPSaccionesListener {
public GpsListener() {
@Override
public void onLocationChanged(Location loc) {
// Este metodo se ejecuta cada vez que el GPS recibe nuevas
coordenadas
// debido a la deteccion de un cambio de ubicacion
if(acciones!=null) {
acciones.cambioSitioGPS(loc);
}
@Override
public void onProviderDisabled(String provider) {
// Este metodo se ejecuta cuando el GPS es desactivado
if(acciones!=null) {
acciones.GPSdeshabilitado(provider);
}
}
@Override
public void onProviderEnabled(String provider) {
// Este metodo se ejecuta cuando el GPS es activado
if(acciones!=null) {
acciones.GPShabilitado(provider);
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle
extras) {
if(acciones!=null)
{
switch (status) {
case LocationProvider.AVAILABLE:
Log.d("debug", "LocationProvider.AVAILABLE");
break;
case LocationProvider.OUT_OF_SERVICE:
Log.d("debug", "LocationProvider.OUT_OF_SERVICE");
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
Log.d("debug",
"LocationProvider.TEMPORARILY_UNAVAILABLE");
break;
}
acciones.cambioStadoListenerGPS(status);
En la manifests deben incluir los permisos para después pedirle al usuario que los autorice.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"
/>
<uses-permission
android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
/>
Ahora simplemente se colocan 2 TextView para conocer la Longitud y la latitud del GPS en la main
activity, enlazarlos y por ultimo de esta manera.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvLatitud = findViewById(R.id.tvLatitud);
tvLongitud = findViewById(R.id.tvLongitud);
comprobarPermisos();
@Override
public void cambioSitioGPS(Location loc) {
loc.getLatitude();
loc.getLongitude();
tvLatitud.setText("Lat:
"+String.valueOf(loc.getLatitude()));
tvLongitud.setText("Lon:
"+String.valueOf(loc.getLongitude()));
}
@Override
public void GPSdeshabilitado(String mensaje) {
@Override
public void GPShabilitado(String mensaje) {
}
});
mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,
0, (LocationListener) GPSDato);
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
0, 0, (LocationListener) GPSDato);
}
public void onRequestPermissionsResult(int requestCode, String[]
permissions, int[] grantResults) {
if (requestCode == 1000) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
locationStart();
return;
}
}
}
}
en el GPSDato.setAcciones en la parte de cambioSitioGPS pueden obtener los datos del GPS que
salen de la clase Location.
En el MainActivity.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvLatitud = findViewById(R.id.tvLatitud);
tvLongitud = findViewById(R.id.tvLongitud);
comprobarPermisos();
@Override
public void cambioSitioGPS(Location loc) {
loc.getLatitude();
loc.getLongitude();
tvLatitud.setText("Lat:
"+String.valueOf(loc.getLatitude()));
tvLongitud.setText("Lon:
"+String.valueOf(loc.getLongitude()));
}
@Override
public void GPSdeshabilitado(String mensaje) {
@Override
public void GPShabilitado(String mensaje) {
}
});
mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,
0, (LocationListener) GPSDato);
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
0, 0, (LocationListener) GPSDato);
}
public void onRequestPermissionsResult(int requestCode, String[]
permissions, int[] grantResults) {
if (requestCode == 1000) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
locationStart();
return;
}
}
}
}
Como se ve en el código anterior, la interfase sirve para realizar un código más organizado y
permite interactuar con cualquier otra clase de manera organizada.