TD Android Les Intents

Documents pareils
TP SIN Programmation sur androïde Support : eclipse

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

TP au menu «UI ANDROID»

SOMMAIRE

Programmation des applications mobiles avec Android. 1 Inspiré du cours de Olivier Le Goaer

Créer des applications Android

Projet Android (LI260) Cours 2

De Java à Android version 0.1

Les fondamentaux du développement d applications Java

Encore plus de widgets et de conteneurs

Warren PAULUS. Android SDK et Android x86

Tutoriel Android - TP de prise en main

Programmation Android L3 informatique

Programmation Mobile Android Master CCI

Android 4 Les fondamentaux du développement d'applications Java

Développement sous Android

Tutoriel Android. Pour démarrer la programmation d'applications Android

Module Architecture des systèmes mobiles : Android première partie Didier FERMENT - UPJV

Introduction ANDROID

Programmation mobile avec Android

1.3 Gestion d'une application

Génie Logiciel et Interaction Homme-Machine PROJET UCAMPUS

TP2 : Client d une BDD SqlServer

DÉVELOPPEMENT ANDROID

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Développement web et mobile

Education Delivery Intelligent Tool

Développement Android. J.-F. Couchot

Environnements de développement (intégrés)

APPLICATIONS JAVA. 1. Android. Développement d'activités Java sous Android. Android Partie I. L'architecture du système Android. Application Android

Gestion des différentes tailles d écran

Terminaux Mobiles Communicants

TP1 : Initiation à Java et Eclipse

Épisode 2 : Les outils de développement Alain Menu édition 2.1, septembre 2013

Manuel d'utilisation: Gestion commerciale - CRM

Guillaume GENS

Android et le Cloud Computing

Espace Repreneur Guide de la Demande d'accès

Le hub d entreprise est une application de déploiement des applications mais aussi un outil de communication

Android 101. Rémi Forax

Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction

Manuel d'utilisation: Gestion commerciale - CRM

Trier les ventes (sales order) avec Vtiger CRM

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Architecture Orientée Service, JSON et API REST

1. Installation d'un serveur d'application JBoss:

Architectures Mobiles

[Projet S9] Rédacteurs & Contributeurs Entité Rédacteurs Contributeurs Imededdine HOSNI Olivier MARTY. Validation du document Nom Date Visa

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Création d un service web avec NetBeans 5.5 et SJAS 9

Manuel d'utilisation: Gestion commerciale - CRM

Alfstore workflow framework Spécification technique

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

OSIRIS/ Valorisation des données PORTAIL BO MANUEL UTILISATEUR

Application de lecture de carte SESAM-Vitale Jeebop

Développement sous Android

MODE D EMPLOI. Plateforme de réflexion et de recherche de la CIDEGEF pour un modèle de management francophone

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Activités professionnelle N 2

Développement tablette Android. SophiaConf2011 Par Arnaud FARINE

Exploration des technologies web pour créer une interaction entre Mahara et les plateformes professionnelles et sociales

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Guide Utilisateur Enregistrement d'un compte en ligne

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Tutorial pour une application simple

Générer du code à partir d une description de haut niveau

4. SERVICES WEB REST 46

TP architecture N-tiers en Java EE ou Java EE, Android : la synthèse. Le serveur GereCompteBancaireServlet

Android. Android is an environment where the biggest limitation is your imagination. P1 1

Introduction à Eclipse

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

mode d emploi CRéATioN et GeSTioN de VoTRe CompTe personnel

Android. Programmation. De la conception au déploiement avec le SDK Google Android 2. Damien Guignard Julien Chable Emmanuel Robles

Le scan de vulnérabilité

Java 7 Les fondamentaux du langage Java

RMI le langage Java XII-1 JMF

Manuel d utilisation NETexcom

SEO On-page. Avez-vous mis toutes les chances de votre côté pour le référencement de votre site?

Android en action. Abdelkader Lahmadi Université de Lorraine

Présentation du système d exploitation Open Source ANDROID

BASE. Vous avez alors accès à un ensemble de fonctionnalités explicitées ci-dessous :

Reversing Android. Aïe, robot...

Formation. Module WEB 4.1. Support de cours

3D Lab. NANO TRANSPORT & NANO PLAYER. Lecteurs réseaux AUDIOPHILE - PROFESSIONNEL. PCM & DSD natif. UPnP DNLA - Bit Perfect media device

Développement d applications professionnelles avec Android 2

République Algérienne Démocratique et Populaire Université Abou Bakr Belkaid Tlemcen Faculté des Sciences Département d Informatique

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

TD n o 8 - Domain Name System (DNS)

!" #$%&'(&)'*'+,--./&0'1&23,+2.)$4$%52'&%'6.%&2'

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

SPECIFICATIONS TECHNIQUES : Gestion des Médicaments et des commandes de médicaments

Flex. Lire les données de manière contrôlée. Programmation Flex 4 Aurélien VANNIEUWENHUYZE

HP Data Protector Express Software - Tutoriel 3. Réalisation de votre première sauvegarde et restauration de disque

TD/TP 1 Introduction au SDK d Android

Utiliser le site learningapps.org pour créer des activités interactives

Premiers Pas en Programmation Objet : les Classes et les Objets

italc supervision de salle

Manuel logiciel client for Android

Transcription:

TD Android Les Intents Romain Raveaux IUT de La Rochelle Pour faire suite à un Hello World un peu atypique façon Google Maps, nous abordons un système important et même essentiel à Android : les Intents. Android offre un système de communication trés ingénieux permettant de faire passer l information entre Activitys ou plus généralement composants applicatifs. Ce système, déjà mentionné dans une partie précédente, est connu sous le nom d Intent. Nous verrons donc dans ce TD comment transmettre l information d une Activity à une autre à l aide de ce mécanisme d Intents. Nous défricherons aussi la différence subtile entre Activity et View seront probablement éclairé par la lecture des lignes suivantes. Introduction Android sandbox les applications. Le mot sandbox est un anglicisme qui signifie simplement bac à sable. Il peu sembler étrange de parler de bac à sable dans un problème d informatique mais c est pourtant bel et bien la traduction adéquate dans le contexte. Le sandboxing est une pratique de plus en plus courante dans la téléphonie mobile qui consiste à séparer presque totalement les applications entre elles. Lorsque Android exécute une application, il restreint cette dernière à des actions bien définies (accès mémoire, accès sur les capteurs, etc ). Cette pratique permet de protéger le système au maximum en évitant de laisser des applications faire comme bon leurs semble. Malgré l énorme apport sur la sécurité, le sandoxing restreint fortement la communication entre applications. C est dans l optique de contourner ce problème, que les Intents ont été conçus. Pour faire simple, un Intent est un ensemble de données qui peut être passé à un autre composant applicatif (de la même application ou non) de façon implicite (requête pour une action lire de la musique ou scanner un code barre par exemple) ou explicite (lancement d une classe précise). Démarrage d une Activity grâce aux Intents Pour bien décrire le système des Intents, nous allons créer une petite application (sans aucun but réel, je l accorde) composée de 2 écrans : le premier dispose d un bouton permettant de démarrer une nouvelle Activity de façon explicite. La seconde Activity affichera simplement un champ de recherche permettant d effectuer une recherche sur Google. Le code de cette application est disponible dans ce dossier zippé.

Démarrage d une activité de façon explicite Pour commencer, créons une première Activity qui affichera un unique bouton central. Le code XML ci-dessous est composé d une unique balise Button. Cette simplicité de l interface graphique provient du fait que l espace disponible au développeur pour afficher son application (l intégralité de l écran moins la barre de tâches et la barre de nom) est disponible sous la forme d un FrameLayout. L image ci-dessous montre la hiérarchie des vues générées avec ce fichier XML. On aperçoit facilement (en bleu) un FrameLayout. Les paramètres android:layout_gravity="center" et android:text="cliquez ici pour démarrer" permettent respectivement de centrer le bouton dans sa vue parente et de définir le texte du bouton. <?xml version="1.0" encoding="utf-8"?> <Button xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="cliquez ici pour démarrer" />

Notre interface graphique étant prête, il suffit maintenant de créer notre première Activity. Pour faciliter la compréhension, j ai préféré directement commenter le code. N oubliez pas d inclure cette nouvelle Activity dans le fichier Manifest.xml pour qu Android autorise son exécution. Le manifest : <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=" fr.pm4.android.hellointent " android:versioncode="1" android:versionname="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".entrypoint" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".googlesearch" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.default" /> </intent-filter> </activity> </application> <uses-sdk android:minsdkversion="3" /> </manifest>

Le code de la première activity : package fr.pm4.android.hellointent; import android.app.activity; import android.content.intent; import android.os.bundle; import android.view.view; import android.widget.button; * La classe EntryPoint implémente l'interface View.OnClickListener. Cela permet ainsi * d'enregistrer l'activité auprès des vues pour qu'elle puisse recevoir les évènements de "clic". public class EntryPoint extends Activity implements View.OnClickListener { bouton * Cette variable permettra de conserver une référence sur le * de l'interface private Button mbutton; * La redéfinition de la méthode oncreate(bundle) permet d'effectuer des actions * supplémentaires à l'activity de base. @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); * On créé l'interface graphique en utilisant le fichier entry.xml. * Ce dernier étant disponible comme ressource (dans /res/layout), il suffit d'utiliser * le fichier R.java et sa sous-classe layout. setcontentview(r.layout.entry); * Récupère une référence sur le bouton en utilisant son identifiant mbutton = (Button)findViewById(R.id.button); * On enregistre l'activité auprès du bouton pour recevoir les évènements * "clic" provoqué par l'utilisateur. mbutton.setonclicklistener(this);

* La méthode onclick(view) provient de l'interface View.OnClickListener. @Override public void onclick(view v) { if (v == mbutton) { * Nous sommes maintenant sûr que la vue ayant été cliquée est le bouton * de notre interface. Il suffit donc de créer un nouvel Intent pour démarrer * la seconde activité. Intent intent = new Intent(EntryPoint.this, GoogleSearch.class); startactivity(intent); Notre première Activity est maintenant terminée. Le lancement d une nouvelle Activity de façon explicite s effectue en deux lignes. La première, Intent intent = new Intent(EntryPoint.this, GoogleSearch.class); crée simplement un nouvel Intent dont le contexte de départ est l Activity courante (EntryPoint.this) et l Activity de destination se nomme GoogleSearch. Démarrage d une activité de façon implicite Il ne nous reste maintenant plus qu à définir l Activity GoogleSearch en utilisant des principes similaires à ceux précédemment décrits. Commençons, tout d abord par créer l interface graphique : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="10px"> <TextView android:text="entrez la recherche à effectuer dans le champ ci-dessous puis cliquez sur le bouton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginbottom="10px" android:gravity="center_horizontal" /> <EditText android:id="@+id/edittext" android:layout_marginbottom="5px" android:layout_width="fill_parent" android:layout_height="wrap_content" />

<ImageButton android:id="@+id/imagebutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/logo_google" android:layout_gravity="center"></imagebutton> </LinearLayout> Il ne me semble pas très important de décrire le fichier XML précédent car il peut être considéré comme classique. Il est à noter, tout de même, une légère différence avec les fichiers XML de notre HelloWorld : les ressources de type chaines de caractères, dimensions, etc. ne sont pas externalisés dans un fichier externe. Dans notre cas cela n a pas réellement d impact puisque nous n allons pas internationaliser l application. package fr.pm4.android.hellointent; import android.app.activity; import android.content.intent; import android.net.uri; import android.os.bundle; import android.view.view; import android.widget.edittext; import android.widget.imagebutton; public class GoogleSearch extends Activity implements View.OnClickListener { private ImageButton mimagebutton; private EditText medittext; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.google); mimagebutton = (ImageButton)findViewById(R.id.imageButton); medittext = (EditText)findViewById(R.id.editText); mimagebutton.setonclicklistener(this); @Override public void onclick(view view) { if (view == mimagebutton) { final String requete = "http://www.google.fr/search?q=" + medittext.gettext(); Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(requete)); startactivity(intent);

Un clic sur le bouton Google créé un nouvel Intent à l aide du constructeur Intent(String,Uri). La chaine de caractère passée en paramètre est une action à effectuer (ici ACTION_VIEW : action définie par le framework qui consiste à démarrer un navigateur web sur l Uri donnée). On démarre enfin l activité par un simple startactivity(intent). Une action ne définissant pas une application en particulier, Android va tenter de chercher une application s étant définie comme capable de répondre à l action ACTION_VIEW. C est cette non certitude sur l application à ouvrir qui explique le nom de cette méthode : implicite. Généralement le navigateur utilisé est celui inclus de base dans le téléphone. Conclusion Les Intents sont des composants essentiels de l architecture Android. Le démarrage explicite ou implicite d une Activity à l aide d Intents n est qu une petite infime partie des possibilités de ce mécanisme. Cette partie fait donc office d introduction aux Intents et vous permet de mieux comprendre la communication entre composants applicatifs Android. Vous êtes maintenant prêts à coder vos premiers programmes à écrans multiples! Remerciement Ce TD a pu voir le jour grâce à l aide de Cyril Mottier et de son livre. Développez pour Android de Cyril Mottier et Ludovic Perrier