Fiche Android : Outils de développement pour Android

Objet de la fiche

État de la fiche Terminée validée


Plan de la fiche :

Avant propos

Android c'est quoi?

Android est un operating system basé sur linux avec un interface de type java.
Le kit de développement Android (Android SDK) met à notre disposition tous les outils nécessaires pour développer une application Android. Ces outils incluent un compilateur, un débuger ainsi qu'un émulateur (machine virtuelle).
Android est actuellemnt développé par Google. Cet OS permet l'exécution de taches en arrière plan, dispose d'une riche librairie pour la gestion des interfaces (graphiques 2-D and 3-D utilisant OpenGL libraries), peut accéder au système de fichiers et embarque une base de données lite (SQLite).

Pré-requis

Vous devez disposer ou installer Android Studio sur votre station de développement. Attention c'est long et ça occupe beaucoup de place.

Création d'un mini projet Android Studio

Créer un nouveau projet dans Android Studio

Une petite vidéo vaut mieux qu'un long discour

  • Name : C'est le nom de l'application vu par les utilisateurs. Pour cet exemple nous utilisons "Test". Ce nom sera utilisé pour le projet sur votre ordinateur et Android Studio va créer une nouvelle ressource qu'il liera avec le nom de l'application pour l'afficher sur les terminaux Android (réel ou non).
  • Package name : C'est le nom du package pour votre application (mêmes règles que les packages du langage de programmation en java). Ce nom doit être unique parmi tous les packages installés sur votre système Android. Le mieux est d'utiler un nom inverse à votre domaine d'utilisation : si votre domaine est "monwebfacile.free.fr" utilez "fr.free" comme nom de domaine ou mieux "fr.free.monwebfacile" qui sera forcément unique. Android rajoutera au bout le nom de l'application.

    Il est important de bien choisir le nom de domaine. En fait, plusieurs applications peuvent avoir le même nom. Il peut alors y avoir un problème de différenciation entre une application Test provenant d'un développeur A et une autre application Test d'un développeur B. Google demande alors de spécifier un nom de domaine unique pour pouvoir identifier ces 2 applications.

    Si le nom de domaine est déjà utilisé vous serez bloqué à l'étape de publication. Cela dit, ce nom de domaine n'est pas obligé d'être un nom de domaine réel. Soit vous avez déjà un nom de domaine et dans ce cas, utilisez le ici. Sinon, inventez en un nouveau que vous utiliserez pour toutes vos applications. Si à l'étape de publication, le nom de domaine est utilisé, il est toujours possible de le modifier sans détruire l'application.
  • Language :
    Les langages qui sont proposés pour le développement Android comprennent:
    • Java est le langage officielle du développement Android et est supporté par Android Studio. Il est relativement dur à appréhender.
    • Kotlin a récemment été introduit comme langage secondaire « officiel » de Java. Il est similaire à Java à bien des égards, mais est un peu plus facile à comprendre.
  • Minimum SDK : C'est la version la plus ancienne d’Android que votre application doit prendre en charge.

Les fichiers utiles générés lors de la création du prolet test

Avant de lancer l'application il est bon de savoir à quoi servent quelques fichiers contenus dans les répertoires du projet :

AndroidManifest.xml

Le fichier AndroidManifest décrit les caractéristiques fondamentales de l'application, et défini chacun de ses composants.
Ce fichier d'écrit aussi l'ensemble des permissions requises avant l'installation. Par exemple une application doit déclarer que dans son fonctionnement elle peut être amenée à accéder à Internet.

Android_Manifest_Arbo.png

Le package représente l'identifiant unique de l'application.

L'application elle même est définie de façon générale par les consignes suivantes :

  • son icone : android:icon="@mipmap/ic_launcher". C'est le logo de l'application, celui qui apparait lorsque l'on installe l'application. Le système ira chercher dans le répertoire mipmap le fichier image ic_launcher.
    • On remarquera que l'extension du fichier (.png) n'apparait pas dans la déclaration.
    • Il est convenu d'utiliser la syntaxe suivante pour les images : ic_Nom
    • L'application choisi automatiquement l'image dans les répertoires drawables (hdpi, ldpi, mdpi, hdpi) en fonction de la dimension réservée à l'image par l'application.
  • son label : android:label="@string/app_name". C'est le nom de l'application, celui qui apparait lorsque l'on utilise cette activité. Le système ira chercher dans le fichier res/values/string.xml la correspondance de app_name ou d'un autre libellé.
  • son thème : android:theme="@style/AppTheme". C'est le mode d'affichage qui sera utilisé par l'activité. Le système ira chercher dans le fichier res/values/styles.xml la correspondance de AppTheme.

android:allowBackup="true" : concerne principalement les applications avec de nombreux paramètres de réglage. Cette directive autorise un backup de vos paramètres à partir d'une source distante (cloud par exemple). Si un utilisateur demande une restauration "sortie usine" ou si l'application est réinstallée sur un autre appareil, le système restore automatiquement vos données sauvegardées dès que l'application est réinstallée. Cela évite à l'utilisateur de re-paramétrer l'application.

L'application peut être composées d'une ou plusieurs activités.

Chaque activité comme l'application étant identifiée par les consignes suivantes :

  • son nom : Nom du fichier de code java dans java/fr.free.test/MainActivity
  • son label : android:label="@string/app_name". C'est le nom de l'activité, celui qui apparait lorsque l'activité est sollicitée. Le système ira chercher dans le fichier res/values/string.xml la correspondance de app_name ou d'un autre libellé.
  • son thème : android:theme="@style/AppTheme". C'est le mode d'affichage qui sera utilisé par l'activité. Le système ira chercher dans le fichier res/values/styles.xml la correspondance de AppTheme.NoActionBar.
  • Le filtre intention (intent-filter) est une expression qui est présente dans l'activité et qui spécifie le type d’intentions (intent) que le composant doit recevoir. Si le composant n’a pas de filtre d’intention, il peut recevoir l’intention explicite. Si le composant a un filtre il peut recevoir des "Intent" implicite et explicite.

    Une application peut définir les composants cibles directement dans l'Intent (Intent explicite) ou demander au système Android de rechercher le composant adéquat en se basant sur les données de l'Intent (Intent implicite).

    Lorsque vous créez une intention implicite, le système Android trouve le composant approprié pour commencer en comparant le contenu de l’intention aux filtres d’intention déclarés dans le fichier manifeste d’autres applications sur l’appareil. Si l’intention correspond à un filtre d’intention, le système démarre ce composant et lui fournit l’objet Intention. Si plusieurs filtres d’intention sont compatibles, le système affiche une boîte de dialogue afin que l’utilisateur puisse choisir l’application à utiliser.

Répertoire res/layout/

Android_layout_Arbo.png

Ce répertoire contient tous les fichiers qui définissent l'interface utilisateur. Ces fichiers sont de type xml et leur noms (dans la limite syntaxique d'Android) peuvent être quelconques.

En effet un layout définit la structure d’une interface utilisateur dans l'application ou dans une activité. Tous les éléments d'un layout sont construits en utilisant une hiérarchie d’objets View et Viewgroup. Un layout dessine habituellement quelque chose que l’utilisateur peut voir et interagir avec. Alors qu’un Viewgroup est un conteneur invisible qui définit la structure de disposition pour View et d’autres Viewgroup.

Exemple du projet

Cette vue ne contient qu'un RelativeLayout, qui sert de conteneur pour une zone de texte. Cette zone de texte (textview dans notre exemple) est définie avec les attributs suivants :

  • La largeur et la hauteur de l'élément.
  • La position de l'élément (centré horizontalement et verticalement).
  • Une marge interne (padding) pour le texte.
Les différents types de layout :
  • Les "LinearLayouts" positionnent les enfants les uns à la suite des autres, soit verticalement soit horizontallement.
  • Les "RelativeLayouts" permettent à l'aides des "LayoutParam" de positionner les enfants ou l'on veut exactement, relativement au parent principal or relativement par rapport à un autre enfant.
    Des "LayoutParam" comme above (au-dessus), below (après), alightWithParent (aligné sur le parent), align_Left (aligné à gauche), align_Top (aligné en haut) ainsi que beaucoup d'autres sont disponibles dans un "RelativeLayout".
  • Les "GridLayout" permettent d’organiser une vue sous forme d’un tableau composé de plusieurs lignes / colonnes. Il permet aussi d’étendre une colonne sur plusieurs cases ou de laisser des cases vides.

Répertoires res/drawable-hdpi/ , res/drawable-ldpi/ , res/drawable-mdpi , res/drawable-xhdpi

Ces répertoires contiennent des images haute définition comme par exemple des bitmaps.
Le dossier drawable contient l'icône de l'application (ic_launcher.png) et cela dans les quatre résolutions (ldpi = basse résolution, mdpi = résolution moyenne, hdpi = haute résolution, xhdpi = très haute résolution).

Répertoire res/values/

Répertoire pour les différents fichiers XML contenant certaines ressources, comme par exemple :

  • colors.xml fichier xml ou l'on va définir les couleurs de texte ou de fond de l'application
  • dimens.xml fichier xml ou l'on va définir les dimensions des divers composants de l'application
  • strings.xml fichier xml ou l'on va définir les textes utiles à l'application
  • styles.xml fichier xml ou l'on va définir les différents style de l'application
  • ...
strings.xml

Ce fichier qui contient les chaines de caractères de l'application référencées par l'attribut "name" exploitable à partir de l'application. Pour information il ne doit pas forcement se nommer strings.xml. Vous pouvez lui donner le nom que vous souhaité, il doit seulement se trouver dans le dossier values.

Il est plus pratique de mettre les textes dans un fichier dédié, que de les intégrer directement dans le code java. D'une part pour des raisons de maintenance, mais aussi si vous souhaitez distribuer votre application à l'international.
Les textes peuvent supporter quelques tags HTML (b, i et u). Les caractères apostrophe, ou quotes doivent être échappés par un antislashe (\).

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">monwebfacile</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>

</resources>
								

styles.xml
<resources>

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations 
		that are NOT specific to a particular API-level can go here. -->
    </style>

</resources>	
								

Répertoire src/package name (fr.free.monwebfacile)/fichiers activité java

Répertoire pour les fichiers sources principaux (les fichiers java).

MainActivity.java

package com.example.monwebfacile;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

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

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

}
						

Nota : Au démarrage de l'application par défaut Activity class démarre et charge un fichier qui permet d'afficher "Hello World." Bien évidemment ce n'est pas terrible, mais important pour la compréhension des mécanismes.

?Theme

spécifie le style de l'interface utilisateur Android

Holo LightHolo DarkHolo Light with dark action bar.

Configure launcher icon

Ce type d'icone represente votre application sur l'écran de votre tablette.

A l'aide de cet outil vous pouvez personnaliser une launcher icone. Avant de publier votre application vous devez vérifier que votre icone est conforme aux spécifications suivantes concernant la taille et l'échelle :

  • 36×36 pour low-density
  • 48×48 pour mdpi (medium-density)
  • 72×72 pour hdpi (high-density)
  • 96×96 pour xhdpi (extra high-density)
  • 144x144 pour xxhdpi
  • 192x192 pour xxxhdpi

Structure résultant de la fin de création du projet


Générer le fichier (.apk) d'installation de l'application

Toutes les applications doivent être signées. Le système sous android destinataire de l'application ne l'installera pas si le fichier .apk n'est pas signé.

Il faut donc signer l'apk avant de diffuser l'application. Pour cela dans le Package Explorer faire un click droit sur le nom du projet concerné, puis sélectionner Android Tools et enfin Export Signed Application Package


1 => sélectionnez votre projet, puis Next 2 => Créer une nouvelle clé en définissant le répertoire de stockage et le mot de passe, puis Next
3 => Définissez les paramètres de la clé, puis Next 4 => Sélectionnez le répertoire de stockage du fichier apk, puis Finish

Une fois le fichier apk généré, vous pouvez le transferer par mail, ou transfert de fichier vers votre appareil android. Une fois récupéré dans votre appareil, un double click sur le fichier lance l'installation de l'application

ATTENTION : Dans les paramètres de sécurité de l'appareil il faut autoriser l'installation d'applications non Market.

Compléments utilisation

Avertissements

Il est important d'effectuer toutes les manipulations de fichiers dans l'environnement Eclipse, car toute modification comme par exemple un renom de fichier sera automatiquement répercuté à l'ensemble du projet.
De même pour les coller, effacer de répertoires ou de fichiers.

Renommer le projet java

Click droit sur le projet dans le Package Explorer

Renommer le package de l'application (com.example.monwebfacile)

Click droit sur le projet dans le Package Explorer

Renommer un répertoire ou un fichier

Click droit sur l'élément du projet dans le Package Explorer

Rajouter une activité

Click droit sur le projet dans le Package Explorer

Utilisation de l'émulateur

Installer l'émulateur

Eclipse met à votre disposition un émulateur sur votre ordinateur (donc sans utiliser une tablette ou un téléphone physiquement) et qui va se comporter comme se comporterait votre appareil Android. Idéal pour tester et mettre au point votre application en local.

L'émulateur Android simule le hardware et l'environnement logiciel d'une tablette ou d'un téléphone (sauf émission d'appel) sous Android. Comme sur votre tablette l'émulateur permet une complète navigation et propose les différents "control keys" que vous pouvez activer à partir de l'application.
Cet outil est idéal pour tester et mettre au point votre application en local, et cela pour diverses configurations matérielles. On peut utiliser tous les services de la plateforme Android comme par exemple invoquer d'autres applications, accéder au réseau, au wifi, aux systèmes audio et video, aux notifications et aux thèmes.

Sélectionnez Android Virtual Device Manager (AVD) Paramétrez le device

"Device" : sélectionne le type d'appareil (principalement le dimensionnement de l'écran) sur lequel appliquer la simulation.
SDCard : pour créer la zone mémoire qui correspond à celle de votre téléphone ou tablette. Cela vous permettra d'éditer des fichiers à partir de votre application android, de rajouter ou d'effacer des fichiers à partir de la console.
"GPU emulation" : autorise automatiquement l'accélération graphique (option disponible pour applications avec API niveau 15, revision 3 et plus haut).
"Snapshot" : n'est pas disponible pour les émulateurs avec accélération graphique sélectionnée. et permet un lancement rapide de l'émulateur (sauf la première fois lorsqu'il n'existe pas de snapshot initial).

Utiliser l'émulateur

Click droit sur le projet dans le Package Explorer

Travailler avec la SDCard : Dalvik Debug Monitor Server (DDMS perspective)

Il s'agit d'un outil de debugg qui permet d'obtenir des informations sur les applications en cours d'exécution ainsi que de leur environnement. L'émulateur doit être en cours d'utilisation.

La méthode générale

  • Ouvrir une nouvelle fenêtre (window/new window)

  • Dans la nouvelle fenêtre (window/Open Perspertive/DDMS)

La méthode à partir de la console générale

A partir de l'écran principal => DDMS en haut à droite ou Java pour revenir à l'écran principal.

Travailler dans la vue DDMS

 Les fichiers de base

Le fichier src/com.example.testwebview/TestWebview.java

Propriétés

C'est le fichier exécutable de l'activité.

Remarques

Générales

  • package : défini le nom du package utilisé.
  • import : ensemble des classes java nécessaire pour l'activité.
  • class TestWebview : définie la classe principale à laquelle on associe les méthodes d'une activité
  • public WebView webView; : lorsqu'une variable est déclarée directement dans la classe, c'est-à-dire à l'extérieur de toute méthode, elle est accessible dans toute la classe. Elle représente l'état de l'objet courant (webView). public car cet élément est accessible de partout et sans aucune restriction à l'intérieur de la classe.
  • oncreate() : est appelé lorsque l'activité est crée pour la première fois, afin de crée toutes les ressources dont elle aura besoin. Cela arrive lorsque l'activité démarre ou qu'elle a étéprécédemment détruite.
    En ce qui concerne les paramètres, si on sauvegarde l'état de l'application dans un "bundle" (typiquement des données dynamiques avec onSaveInstanceState), il sera possible de retrouver l'état de l'application car ces données seront passées à onCreate si l'activité doit être recrée (exp., changement d'orientation) et on conserve ainsi les informations prioritaires. Si aucune donnée n'est disponible savedInstanceState est nul.

    Associées à oncreate() les méthodes suivantes constituent le cycle complet d'une activité.
    • onStart() : Appelée lorsque l'activité est activée et est visible par l'utilisateur.
    • onRestart() : Aprés qu'une activité ait été arrétée, elle peut être ramenée au premier plan. Dans ce cas, l'activité redémarrera à partir de onStart().
    • onResume() : L'activité est prête à interagir avec l'utilisateur.
    • onPause() : Appelée lorqu'une autre activité vient au premier plan. C'est là que l'on peut sauvegarder des données dynamiques ou persistentes car aprés en d'hors de cet état, l'activité peut être détruite à n'importe quel moment.
    • onStop() : Quand l'activité est complètement terminée et qu'il n'y plus aucune possibilité d'interagir avec l'environnemente.
    • onDestroy() : L'activité est complètement détruite. Toutes les ressources afférentes sont supprimées.

  • super.onCreate(savedInstanceState); : sauvegarde des informations en vue d'un redémarrage de l'application.
  • setContentView() : associe la première vue graphique à l'activité principale de l'application décrite dans le fichier layout_webview.xml.
  • webView = (WebView) findViewById(R.id.webview); : instanciation de l'objet graphique webview permettant de le récupérer à partir de son id, ce qui permet d'agir sur cette instance même si elle a été créée via une définition XML.

    Par défaut une webview n'est pas à proprement parler un navigateur, ne supporte pas le JavaScript et les erreurs sur les pages Web sont ignorées. Elle se limite à afficher des pages HTML pures dans lesquelles l'utilisateur n'a pas à interagir avec la page web, et la page web n'interagit pas avec l'utilisateur. D'un autre coté on peut lui appliquer de nombreuses personnalisation dans lesquelles on peut ajouter les fonctions absentes de base, en autres :

    • Création et personnalisation d'une sous classe WebChromeClient. Cette classe est appelée lorsque quelque chose peut avoir un impact sur l'affichage utilisateur. Par exemple la progression du chargement de la page web, ou des alertes JavaScript sont des actions reçues et pouvant être exploitées au niveau du WebChromeClient.
    • Création et personnalisation d'une sous classe WebViewClient. Cette classe est appelée lorsque quelque chose a un impact sur le résultat attendu, comme par exemple les erreurs ou la soumission de formulaire. On peut aussi y intercepter l'URL en cours de chargement via shouldOverrideUrlLoading().
    • Modifier les paramètres de la webview, comme l'autorisation du JavaScript avec setJavaScriptEnabled() et beaucoup d'autres paramètres que nous découvrirons au fur et à mesure de ce tutorial.
    • Détecter des objets java avec l'utilisation de la méthode addJavascriptInterface(Object, String).
  • Suppression du cache de l'appareil :
    Comme des données peuvent changer sur notre page web de test, on va imposer à l'appareil une connexion à partir du réseau et non pas à partir du cache interne.
    • webView.clearCache(true); : efface le cache actuel s'il existe.
    • webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); : récupère le contexte (webView.getSettings()) et paramètre pour ne plus utiliser le
      cache (setCacheMode(WebSettings.LOAD_NO_CACHE);).

Afficher de petits messages (toast)

Généralités

Android met à notre disposition la possibilité d'afficher des messages dans un pop-up. Le contenu du pop-up ou toast est initialisé par le développeur de l'application.

Afin de facilité l'utilisation de l'affichage de ces petits messages on va créer (dans la partie // Méthodes filles ) une fonction public void myToast(String theMessage) qui exécutera le code d'affichage du toast chaque fois qu'on l'appelera (à partir de n'importe ou dans la classe principale) par l'instruction myToast("Ce que je veux afficher");

Détail de la procédure public void myToast()

La syntaxe générale pour générer un toast est : Toast toast = Toast.makeText(context, text, duration);.

Tout d'abord on doit instantier un objet toast avec la méthode makeText : cette méthode fonctionne avec 3 paramètres : le contexte de l'application, l'information à afficher et la durée d'affichage. La méthode retourne un objet Toast que l'on peut afficher avec show().

  • getApplicationContext() : (paramètre context) récupère le contexte courant.
  • Html.fromHtml(theMessage) : (paramètre text) est le contenu de la variable theMessage sur laquelle on applique la fonction Html.fromHtml permettant d'afficher un contenu susceptible de contenir des balises HTML (exp données <b>OK</b>).
  • Toast.LENGTH_SHORT : (paramètre duration) correspond au temps d'affichage du toast. Toast.LENGTH_SHORT pour un affichage rapide (2 secondes), Toast.LENGTH_LONG (3,5 secondes) pour un affichage plus long.
Remarques

Nous verrons ultérieurement comment personnaliser simplement ce toast : dimension et couleur du texte, fond, positionnement etc., toutefois il est possible grace à un layout d'avoir des personnalisations beaucoup plus complexes (rajouter des images, textes etc.)

A titre d'information voici un type de code correspondant à l'utilisation d'un layout :



 Contrôle du chargement des url (WebViewClient)

La sous classe WebViewClient (de la classe WebView) est appelée lorsque quelque chose a un impact sur le résultat attendu, et donne ainsi à l'application la possibilité de prendre la main lorsque une nouvelle URL est en cours de chargement dans la webview courante.

Les méthodes de la classe WebViewClient

MéthodesCommentaires
shouldOverrideUrlLoading(WebView view, String url) {} Permet à l'application d'exécuter une opération lorsque une nouvelle URL est sur le point d'être chargée dans la WebView courante. La méthode retounera true si l'application fait un traitement, false dans le cas contraire.
onPageStarted(WebView view, String url, Bitmap favicon) {} Notifie l'application que le chargement d'une page a démarré. La méthode est appelée une seule fois pour chaque page principale chargée, ce qui signifie qu'une page contenant des frames n'invoquera cette méthode q'une fois pour la frame principale.
onPageFinished(WebView view, String url) {} Notifie l'application que la page a finie d'être chargée. La méthode est appelée une seule fois pour chaque page principale en fin de chargement.
onLoadResource(WebView view, String url) {} Notifie l'application que la WebView chargera la ressource spécifiée par l'URL concernée.
onTooManyRedirects(WebView view, Message cancelMsg, Message continueMsg) {} Notifie l'application que le nombre maximal de redirections a été atteint.
paramètre cancelMsg : Le message à envoyer si l'application demande l'arrêt de l'action.
paramètre continueMsg : Le message à envoyer si l'application désire continer son action.
onReceivedError(WebView view, int errorCode, String description, String failingUrl) {} Reporte une erreur à l'activité. Ces erreurs concernent le réseau (exp coupure wifi).
paramètre errorCode : Le code d'erreur HTTP.
paramètre description : Description de l'erreur.
paramètre failingUrl : L'URL en défaut.
doUpdateVisitedHistory(WebView view, String url, boolean isReload) {} Notifie l'application pour mettre à jour la liste des liens visités.
paramètre url : L'URL visitée.
paramètre isReload : True si l'URL est rechargée.
onFormResubmission(WebView view, Message dontResend, Message resend) {} Cas de ré-envoi de données par la méthode post (formulaires).
paramètre dontResend : Le message à envoyer si le navigateur n'est pas autorisé à envoyer les données.
paramètre resend : Le message à envoyer si le navigateur doit renvoyer les données.
onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {} Notifie l'application d'une erreur de requête de certificat. Affiche un message à l'utilisateur et demande si celui-ci veut Continue(handler.proceed()) ou Non(handler.cancel()).
paramètre handler : Objet SslErrorHandler pour le management de la réponse de l'usager.
paramètre error L'objet erreur SSL.
onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {} Notifie l'application d'une demade d'authentification de la part de la page web.
paramètre handler : Objet HttpAuthHandler pour le management de la réponse de l'usager.
paramètre host : Host demandant l'authentication.
paramètre realm : Aide utilisateur pour sauvegarde des informations en vue des visites futures.
shouldOverrideKeyEvent(WebView view, KeyEvent event) {} Possibilité pour l'application de gérer des évènements clavier (touche) de façon synchronisée.
paramètre event : Evènement touche.

returner True si l'application manage l'évènement, False dans l'autre cas.
onUnhandledKeyEvent(WebView view, KeyEvent event) {} Notifie l'application que cet évènement (touche) n'est pas géré par le WebView (exeption faite des touches système, ou si shouldOverrideKeyEvent renvoie true.
paramètre event : Evènement touche.
onScaleChanged(WebView view, float oldScale, float newScale) {} Notifie l'application que les dimensions d'affichage debView ont changées.
paramètre oldScale : Ancien facteur d'échelle.
paramètre newScale : Nouveau facteur d'échelle.

onReceivedError() : erreur d'accessibilité à la page Web

But

La non accessibilité au web peut provenir soit de l'accés au site lui-même (fichier effacé, non chargeable, serveur hors service etc..), soit de l'appareil Android lui même (panne 3G, WIFI).

  • Cas du serveur
    Le serveur renvoi une page d'erreur.
  • Cas de l'appareil Android
    En principe le dernier accés est conservé dans le cache. Si ce n'est pas le cas l'appreil va générer sa propre information de type "Page Web non disponible" accompagné de quelques suggestions.

Nous allons nous interresser au cas de l'appareil Android et afficher une page d'erreur personnalisée pour signaler clairement l'anomalie.

Principe

On introduit ici la méthode onReceivedError() de la sous classe WebViewClient qui va permettre de gérer des erreurs d'accés à la page Web.
En cas d'erreur on affichera une page HTML locale et pour cela on utilisera un accés à une nouvelle ressource contenue dans un nouveau répertoire : assets.

Informations sur la page html signalant l'erreur

Localisation : assets/erreur_connexion/erreurTestWebView.html

Le fichier src/com.example.testwebview/TestWebview.java

But

Insérer le code lié à la déclaration de la sous classe WebViewClient

Code
Remarques
  • onReceivedError() : Signale une erreur à l'application, fourni le code, les détails de l'erreur et l'url incréminée.
  • Au même niveau que le dossier src, on retrouve un dossier nommé assets et qui contient simplement des données qui seront chargées sur le mobile lors de la compilation de votre projet. Les données inclues dans ce dossier ne sont normalement pas en accord avec l’arborescence classique d’un projet Android : cela peut, par exemple, être des fichiers texte (html, txt, pdf etc..), des fichiers audio ou vidéo, etc.

Le fichier res/value/strings.xml

But

Déclarer le répertoire et le nom du fichier html (répertoire assets) à afficher en cas d'erreur.

Code

shouldOverrideUrlLoading() : Interception d'URL

But

Give the host application a chance to take over the control when a new url is about to be loaded in the current WebView.

shouldOverrideUrlLoading() est une méthode publique de WebViewClient



Principe


Respectons la propriété intellectuelle