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.
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/
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.
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 (\).
<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 Light
Holo Dark
Holo 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.
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.
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.
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.
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.
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.
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.
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.
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.
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