Documentos de Académico
Documentos de Profesional
Documentos de Cultura
LABORATORIO 13
“WebApps”
1. Cree un nuevo proyecto llamado MyWebApp, aceptar las opciones por defecto y seleccione
una Empty Activity como plantilla inicial.
2. Procedemos a agregar un control de tipo WebView en el layout de la actividad principal
“activity_main.xml”:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
4. Como siguiente paso configuramos el WebView para que cargue la dirección que hemos
asignado.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
1
Soluciones Móviles I
<uses-permission android:name="android.permission.INTERNET"/>
<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/Theme.MyWebApp">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</manifest>
2
Soluciones Móviles I
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?
attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>
11. Ahora procedemos a agregar el soporte para el historial del WebView y no salir de la
aplicación si se presiona el botón atrás, para esto sobreescribimos el método onKeyDown de
la actividad principal.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
WebView webView = (WebView)findViewById(R.id.webView);
if((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
webView.setWebViewClient(new MyWebViewClient());
webView.loadUrl(DIRECTION);
14. Creamos una clase llamada WebAppInterface que servirá de interfaz entre el script de
Javascript y la app.
import android.content.Context;
import android.webkit.JavascriptInterface;
import android.widget.Toast;
WebAppInterface(Context c){
3
Soluciones Móviles I
context = c;
}
@JavascriptInterface
public void showToastMessage(String message){
Toast.makeText(context,message,Toast.LENGTH_SHORT).show();
}
}
15. Ahora enlazamos la clase al intérprete de Javascript que correrá en el WebView, para esto se
hará uso del método addJavascriptInterface() y nombraremos a la interface Android.
WebView webView = (WebView)findViewById(R.id.webView);
webView.addJavascriptInterface(new WebAppInterface(this),"Android");
webView.setWebViewClient(new MyWebViewClient());
webView.loadUrl(DIRECTION);
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function showAndroidToast(message){
Android.showToastMessage(message);
</script>
</head>
<body>
</body>
</html>
17. Prueba que al lanzar el servidor de aplicaciones, el script muestre el botón creado.
4
Soluciones Móviles I
18. Ahora modifique la dirección de carga del webview para que apunte al script que usted ha
creado.
private static String DIRECTION
= "http://10.0.2.2/ejemplo/index.html";
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:usesCleartextTraffic="true"
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/Theme.MyWebApp">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</manifest>
PRACTICA CALIFICADA
Bajo el mismo concepto del laboratorio, construya una calculadora mediante el uso de interfaces en
Javascript.