El tutor de nuestro curso online de Desarrollo de Aplicaciones para Android, Víctor Ramírez Las,…
Geolocalización: obtención coordenadas desde App Android
1.
Geolocalización: obtención coordenadas desde App Android
Siguiendo con los contenidos del curso de desarrollo de Aplicaciones para Android, vamos a abordar el módulo relativo a la Geolocalización.
Como esta temática ya la hemos tratado en anteriores tutoriales, vamos a publicar solo aquellos contenidos que difieran o sean complementarios a los ya presentados. Si quieres empezar desde cero, te recomendamos que leas esta introducción a la Geolocalización donde veíamos los conceptos básicos sobre los valores que intervienen en la triangulación de un dispositivo móvil haciendo uso del sistema GPS.
En esta publicación vamos a ver cómo obtener las coordenadas del smartphone o tablet desde una aplicación Android. Para ello nos apoyaremos en un ejemplo práctico cuya principal tarea será mostrar los datos referentes a la longitud, latitud, altura y precisión de la localización del dispositivo móvil:
Nota: los usuarios Premium pueden descargar el proyecto al final de este tutorial
Comenzaremos por crear una clase que herede de la clase base Activity, y que implemente la interfaz ActivityCompat.OnRequestPermissionsResultCallback:
1 2 3 |
public class MainActivity extends Activity implements ActivityCompat.OnRequestPermissionsResultCallback { |
Se declaran tres variables de tipo TextView que recogerán los valores de la posición del dispositivo:
1 2 |
private TextView tvLatitud, tvLongitud, tvAltura, tvPrecision; |
Se declara una variable de tipo LocationManager
encargada de proporcionar acceso al servicio de localización del sistema:
1 2 |
private LocationManager locManager; |
Se declara una variable de tipo Location
:
1 2 3 4 5 6 7 8 9 10 11 12 |
private Location loc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvLatitud = (TextView)findViewById(R.id.tvLatitud); tvLongitud = (TextView)findViewById(R.id.tvLongitud); tvAltura = (TextView)findViewById(R.id.tvAltura); tvPrecision = (TextView)findViewById(R.id.tvPrecision); |
Se solicitan los permisos para que el usuario seleccione si desea permitir el acceso al GPS del dispositivo:
1 2 |
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); |
Se comprueba si se han concedido los permisos para mostrar los datos de latitud, longitud, altura y precisión del dispositivo
1 2 3 4 5 6 7 8 9 10 11 |
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { tvLatitud.setText("No se han definido los permisos necesarios."); tvLongitud.setText(""); tvAltura.setText(""); tvPrecision.setText(""); return; }else { |
Se asigna a la clase LocationManager
el servicio a nivel de sistema a partir del nombre:
1 2 |
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); |
Posteriormente, se asigna a la variable de tipo Location
que accederá a la última posición conocida proporcionada por el proveedor:
1 2 |
loc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); |
Finalmente se asignan los valores de la última posición a cada variable de tipo TextView
:
1 2 3 4 5 6 7 8 |
tvLatitud.setText(String.valueOf(loc.getLatitude())); tvLongitud.setText(String.valueOf(loc.getLongitude())); tvAltura.setText(String.valueOf(loc.getAltitude())); tvPrecision.setText(String.valueOf(loc.getAccuracy())); } } } |
Además se deberá declarar en el fichero AndroidManifest.xml
el permiso que permitirá a la API determinar la ubicación más precisa posible a través de los proveedores de ubicaciones disponibles, entre los que se incluyen el sistema de posicionamiento global (GPS) y los datos de Wi-Fi y los datos móviles:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.academiaandroid.datosgps"> <!--Permiso declarado --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!--Permiso declarado --> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
Descarga proyecto
Puedes descargar aquí el código de este proyecto ejemplo (usuarios Premium):
Download