App hibrida con Android - parte 1


Una app híbrida (o web app, según criterios)  es una aplicación desarrollada utilizando tecnologías web como HTML, CSS y Javascript; y que a su vez funciona bajo el entorno nativo del sistema operativo en el que se ejecuta.

El ejemplo mas básico de una app híbrida en android seria un webview que carga una url, como muestran en Android Developers. De ahi mismo sale este ejemplo, el cual he decidido mostrar por si sirve a alguien.
Para empezar,
Comenzamos creando un nuevo proyecto con Android Studio, ponemos el nombre que queramos a la aplicación, seleccionamos la API mínima (en mi caso he utilizado la API 16: Android 4.1) y en el ultimo paso escogemos "Empty Activity". Después modificamos los siguientes archivos:
  • En activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.jm.ejemploweb.MainActivity">

    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

  • En MainActivity.java
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myWebView = (WebView) findViewById(R.id.webView);
        myWebView.setWebViewClient(new MyWebViewClient());

        // Javascript viene deshabilitado por defecto en webview, hay que habilitarlo.
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);

        myWebView.loadUrl("http://creandobits.blogspot.com");
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Al pulsar atras vamos a la pagina anterior
        // Si no puede, por lo que sera la pagina principal, sale de la aplicacion
        if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
            myWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // Si la url corresponde a nuestro sitio web, es decir comienza con nuestro dominio, 
            // esta se carga dentro del webview. Si no, se carga fuera de la app en el navegador web del sistema.
            if (url.startsWith("http://creandobits.blogspot.com")) {
                return false;
            } else {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
            }

        }

    }
}

  • Como la aplicación necesita conexion a internet, ha de añadirse el permiso en el AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />

Y ya esta. Cambiando el texto "http://creandobits.blogspot.com" del codigo podemos tener la app de cualquier pagina web que quisieramos.

Referencias:
https://developer.android.com/guide/webapps/webview.html
http://es.androids.help/q16330

Comentarios

Entradas populares de este blog

Obtener provincia a traves del codigo postal con Javascript

GUI en Python con Glade

Conversor de imagenes a Base64