Hola amigos hoy veremos como convertir coordenadas del gps en un link, luego tomaremos este link y lo insertaremos en un webview, la idea es que se muestre nuestra posición en el webview por medio de google map y podamos visualizar todos los datos de forma gráfica, como siempre les traigo este tutorial de una forma sencilla, les prometo que es muy fácil, solo quiero que pongan atención a los pasos que veremos hoy y verán que es fácil, como de costumbre al final podrán descargar la aplicación si así lo desean pero les recomiendo que lean todo el tutorial y en unos 10 minutos dominaran el tema.
convertir coordenadas en un link luego mostrarlo en un webview
Contenidos
Empezaremos con los permisos, yo aconsejo que se utilice los siguientes para este ejercicio el cual estarán dentro de nuestro AndroidManifest
AndroidManifest
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.androfast.server.webview"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" 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> <activity android:name=".Gps"></activity> </application> </manifest>
para este ejemplo agregamos un splasScreen si no sabes que es te recomiendo que revizes el siguiente enlace: como hacer un splash Screen por tal motivo en la carpeta Drawable demos pega la siguiente imagen que te dejo a continuación.
Entonces seguimos, nosotros al crear nuestra app se nos crea por defecto nuestro MainActivity, así que aprovecharemos esa clase para dar los permisos de ejecución del gps y la detección de las coordenadas.
MainActivity
public class MainActivity extends Activity { // Duración en milisegundos que se mostrará el splash private final int DURACION_SPLASH = 3000; // 3 segundos @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setPermissionForM(); } private void displaySplashScreen() { new Handler().postDelayed(new Runnable() { /* * Showing splash screen with a timer. This will be useful when you * want to show case your app logo / company */ @Override public void run() { Intent i = new Intent(MainActivity.this, Gps.class); startActivity(i); finish(); } }, DURACION_SPLASH); } private void setPermissionForM() { int PERMISSION_ALL = 1; String[] PERMISSIONS = { Manifest.permission.ACCESS_FINE_LOCATION }; if(!hasPermissions(this, PERMISSIONS)){ ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL); } } public static boolean hasPermissions(Context context, String... permissions) { if (context != null && permissions != null) { for (String permission : permissions) { if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { return false; } } } return true; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); Map<String, Integer> perms = new HashMap<String, Integer>(); // Initial perms.put(Manifest.permission.ACCESS_COARSE_LOCATION, PackageManager.PERMISSION_GRANTED); perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED); for (int i = 0; i < permissions.length; i++) perms.put(permissions[i], grantResults[i]); if (perms.get(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED && perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { // All Permissions Granted displaySplashScreen(); } else { // Permission Denied Toast.makeText(MainActivity .this, "Some Permission is Denied", Toast.LENGTH_SHORT) .show(); } } }
Ahora crearemos una clase mas llamada Gps, en esta clase vamos a trabajar nuestra webview y vamos a tomar las coordenadas obtenidas en nuestro MainActivity y transformarla en un enlace.
Gps
public class Gps extends Activity { private WebView _webView; private String latitude; private String longitude ; private LocationManager locManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gps); localizacion(); } private void localizacion() { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { } locManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE); Location loc = locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); Log.d("Localizacion", "localizacion: " + loc.getLatitude()); latitude = String.valueOf(loc.getLatitude()); longitude = String.valueOf(loc.getLongitude()); System.out.println(String.valueOf(loc.getLatitude())); Log.d("lob", longitude); Log.e("lat", latitude); _webView = (WebView) findViewById(R.id.webview); _webView.getSettings().setJavaScriptEnabled(true); _webView.getSettings().setGeolocationEnabled(true); _webView.loadUrl("https://www.google.com/maps?q="+latitude+","+longitude); } }
Ahora debemos situarnos en nuestra carpeta layout y dentro buscamos a nuestro activity_main y escribiremos lo siguiente en modo texto:
activity_main
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" > <ImageView android:id="@+id/logo_id" android:layout_width="250dp" android:layout_height="250dp" android:layout_centerInParent="true" android:src="@drawable/logo"/> </RelativeLayout>
Siguiendo dentro de nuestra carpeta layout crearemos un nuevo archivo xml llamado activity_gps aquí sera donde pondremos nuestro control webview te dejo el codigo en modo texto.
activity_gps
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.androfast.server.webview.Gps"> <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.constraint.ConstraintLayout>
Por ultimo crearemos un archivo xml llamado splash este archivo cargara nuestra imagen antes para dar paso al permiso de ejecución y luego de aceptar nos mostrara el webview.
splash
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" > <ImageView android:id="@+id/logo_id" android:layout_width="250dp" android:layout_height="250dp" android:layout_centerInParent="true" android:src="@drawable/logo"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/logo_id" android:layout_centerHorizontal="true" android:text="Splash Screen" android:textSize="30dp"/> </RelativeLayout>
Eso fue todo ahora te dejare el enlace de descarga, recuerda si tienes dudas puedes dejarme un mensaje.
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!