Está en la página 1de 10

Usar El GPS Android Studio 2019

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.

Después implementamos los metodos de la interfase. A Continuación se explicaran los métodos

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
@Override
public void onProviderDisabled(String provider) {
// Este metodo se ejecuta cuando el GPS es desactivado

@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 {

void cambioStadoListenerGPS(int status);


void cambioSitioGPS(Location loc);
void GPSdeshabilitado(String mensaje);
void GPShabilitado(String mensaje);

public class GpsListener implements LocationListener {

private GPSaccionesListener acciones;

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

public GPSaccionesListener getAcciones() {


return acciones;
}

public void setAcciones(GPSaccionesListener acciones) {


this.acciones = acciones;
}
}

Esto se hace con la intensión de implementar a manera organizada en el programa principal.

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.

public class MainActivity extends AppCompatActivity {

private TextView tvLongitud,tvLatitud;


private GpsListener GPSDato;

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

private void comprobarPermisos(){


//codigo para perdir permisos al usuario
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new
String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
} else {
locationStart();
}
}

private void locationStart() {


LocationManager mlocManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
GPSDato = new GpsListener();
GPSDato.setAcciones(new GPSaccionesListener() {
@Override
public void cambioStadoListenerGPS(int status) {

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

}
});

final boolean gpsEnabled =


mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!gpsEnabled) {
Intent settingsIntent = new
Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(settingsIntent);
}
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new
String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
return;
}

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.

public class MainActivity extends AppCompatActivity {

private TextView tvLongitud,tvLatitud;


private GpsListener GPSDato;

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

private void comprobarPermisos(){


//codigo para perdir permisos al usuario
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new
String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
} else {
locationStart();
}
}

private void locationStart() {


LocationManager mlocManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
GPSDato = new GpsListener();
GPSDato.setAcciones(new GPSaccionesListener() {
@Override
public void cambioStadoListenerGPS(int status) {

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

}
});

final boolean gpsEnabled =


mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!gpsEnabled) {
Intent settingsIntent = new
Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(settingsIntent);
}
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new
String[]{Manifest.permission.ACCESS_FINE_LOCATION,}, 1000);
return;
}

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.

Listo, aquí les dejo el link del proyecto en MEGA


Android,2019,AndroidStudio,

También podría gustarte