Programmation Android V. Intents / Intent Filters. Cours Android - F. Michel 1 / 67

Documents pareils
Projet Android (LI260) Cours 2

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

DÉVELOPPEMENT ANDROID

Les fondamentaux du développement d applications Java

SOMMAIRE

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

Développement d applications professionnelles avec Android 2

Sécurité et Firewall

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

TP au menu «UI ANDROID»

Créer une base de données vidéo sans programmation (avec Drupal)

Tutorial pour une application simple

Paris Airports - Web API Airports Path finding

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

3 Octobre Les Communautés MS

Android et le Cloud Computing

INF6304 Interfaces Intelligentes

Installation et prise en main

Programmation Mobile Android Master CCI

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

Manuel d'utilisation: Gestion commerciale - CRM

Gestion Electronique de Document (ECM/GED)

TP2 : Client d une BDD SqlServer

Digital /Social Marketing. NADAV EVENT MANAGEMENT Contact : Nadya CHAMOR contact@nadavevent.com

FORMATION KAWET. Formation : Créer une appli mobile avec Kawet

1 - Connexion au service de gestion des demandes informatiques du lycée

FICHE METIER. «Opérateur de prises de vue» Opérateur de prises de vue vidéo. Cadreur. Pointeur vidéo APPELLATION(S) DU METIER DEFINITION DU METIER

Android. Présentation d Android. Florent Garin

APPLICATION THOMSON HEALTHCARE GUIDE D UTILISATION

SOMMAIRE. 3. Comment Faire? Description détaillée des étapes de configuration en fonction du logiciel de messagerie... 3

EVENEMENT CONNECTE. Copyright Headoo all rights reserved

TigerPro CRM Application mobile

Google Analytics - Analysez le trafic de votre site pour améliorer ses performances inclut Universal Analytics (2ième édition)

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Accélérez votre émulateur Android

Référencement naturel

Cartographie et audit du réseau GSM avec des outils Open Source

AVANT-PROPOS INTRODUCTION INSTALLATION INSTALLER LE PLUGIN ZOTERO INSTALLER LE MODULE DE CITATION...

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

PROJET ISLAH TEMPUS IT-TEMPUS-SMHES. Projet financé par PLATEFORME ISLAH MANUEL D UTILISATION SECTION ENTREPRISES

Manuel d'utilisation: Gestion commerciale - CRM

+33 (0) Sarl ISB Altipolis2 av. Du Général Barbot Briancon - France

Développement tablette Android. SophiaConf2011 Par Arnaud FARINE

Les réseaux sociaux et le mobile au service de l industrie du tourisme digital

MESSAGERIE SANTE-LORRAINE Documentation utilisateurs Gestion des spams V1.2

Agence de Picture Marketing. Pour Opérations Spéciales / Événements

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

Configuration du driver SIP dans ALERT. V2

4. SERVICES WEB REST 46

Manuel d intégration API SOAP SMS ALLMYSMS.COM

Formation Optimiser ses campagnes ing

ÉCOLE POLYTECHNIQUE FÉDÉRALE DE LAUSANNE. Manuel de formation. Achats

Gestion des différentes tailles d écran

HMI target Visu / PLC HMI. Pour réaliser une interface homme machine avec PLC control

Déploiement de l iphone et de l ipad Gestion des appareils mobiles (MDM)

1 Introduction à Emerginov

Fiche n 15 : Envoi d , alarme visuelle et synchronisation Outlook

CYBER-BASE M. E. F. I 2 RIVES. Programme des Ateliers

Guide utilisateur - Outlook Guide d utilisateur. Outlook JTo Page 1

Programmation mobile avec Android

Guide de configuration d'une classe

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

arcopole Studio Annexe 4 Intégration LDAP et processus d authentification Site du programme arcopole :

Ordinateurs, Structure et Applications

UNE SOLUTION DE TÉLÉPHONIE HÉBERGÉ DANS LE NUAGE

NOVLAND. production. Présente TMC. transmedia catalogue air / touch

Manuel : Comment faire sa newsletter

Guide de l utilisateur Nokia Mail for Exchange 3.0

A L ERT. Pour démarrer rapidement avec

Développement sous Android

MÉDICLICK! STUDIO 3 DOCUMENT CENTER : MAILCLICK! SOMMAIRE

Introduction ANDROID

2010/2011 [PROJET TEXT TO SPEECH] Génie Logiciel des Interactions Homme-Machine. Germain Costenobel Pierre Barois

SI-MARK. Outil de création de landing pages professionnel. Mickael Leforestier Commercial Director

Androïd Manuel d installation MB PRO LIGHT Préalable. Définitions

BeSpoon et l homme Connecté

Polar. Nouveautés Polar

Guide d usage pour Word 2007

Catalogue des formations Edition 2015

OPTENET DCAgent Manuel d'utilisateur

Votre premier projet Android

MDM Multicanal. - Tous Droits Réservés

NetBak Replicator 4.0 Manuel de l utilisateur Version 1.0

Liberscol. Notes d informations. Tetra-Informatique Liberscol

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

CTIconnect PRO. Guide Rapide

DOSSIER FLASH. «Path - Tango»

Écriture de journal. (Virement de dépense)

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

LUTTE CONTRE L AMBROISIE

Créer le schéma relationnel d une base de données ACCESS

Présentation du Sedex Data Monitor Une nouvelle gamme excitante d outils de reporting performants

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Annexe Android Studio

Mémoire technique Mise en place de l appliance SMS Couplage Supervision V1.0

L AMPHI #2 LA REVOLITION MOBILE EST EN MARCHE. #Amphi2GIW

La base de données XML exist. A. Belaïd

Configuration du matériel Cisco. Florian Duraffourg

arcopole Studio Version 3.1

Transcription:

Programmation Android V. Intents / Intent Filters 1 / 67

Plan 1 Définition 2 Cas d utilisation 3 Intent explicite 4 Intent implicite 5 Réception d un Intent implicite : <intent-filter> 6 Résolution des intents implicites 7 Quelques exemples d Intents implicites usuels 2 / 67

Définition android.content.intent API Définition Un Intent est un objet qui sert à demander la réalisation d une action par un autre composant de la plate-forme Android (activity, service, content provider, broadcast receiver) En outre, l Intent est aussi utilisé pour véhiculer toutes les informations nécessaires à la réalisation de l action demandée. 4 / 67

Cas d utilisation android.content.intent API Cas d utilisation 1 : démarrage d une activité (avec UI) 1 startactivity(intent) 2 startactivityforresult(intent, int) L intent décrit l activité à lancer et contient les informations nécessaires à son accomplissement Dans (2), le résultat est transmis à l activité initiatrice via un autre intent passé à sa méthode onactivityresult (int requestcode, int resultcode, Intent data) 6 / 67

Cas d utilisation android.content.intent API Cas d utilisation 2 : démarrage d un service (sans UI) 1 startservice(intent) 2 bindservice(intent, ServiceConnection, int) L intent décrit le service à lancer et contient les informations nécessaires à son accomplissement (2) : pour les services de type client / serveur (dépendance entre l application et le service) 7 / 67

Cas d utilisation android.content.intent API Cas d utilisation 3 : émission susceptible d être captée par n importe quelle application du système (broadcast) 1 sendbroadcast(intent) 2 sendorderedbroadcast(intent, String) L intent décrit l événement à transmettre et contient les informations liées à celui-ci exemples : événements système tels que wifi on/off, boot terminé, prise de vue, etc. (2) : avec un ordre de préférence (géré par le système) sur les receveurs 8 / 67

Intent explicite Intent explicite Principe Définit le composant à activer en spécifiant explicitement son nom Java complet (package + classe) exemples : un composant de l application, un service identifié, etc. par exemple par l intermédiaire d un objet de type Class : utilisation du constructeur Intent(Context, Class<?>) : 10 / 67

Intent explicite Intent explicite, exemples de construction : voir aussi Intent.setComponent(android.content.ComponentName) voir aussi Intent.setClass(android.content.Context, java.lang.class<?>) voir aussi Intent.setClassName(java.lang.String, java.lang.string) 11 / 67

Intent explicite Intent explicite Remarques Si le composant cible n est pas spécifié, l intent est considéré de facto comme implicite Lors de l appel à un service, il est fortement recommandé de toujours spécifier celui-ci explicitement afin d être certain du service activé 12 / 67

Intent implicite Intent implicite Principe Ne spécifie pas le composant visé Demande l exécution d une action, standardisée, par un autre composant du système capable de gérer cette la demande Pour pouvoir répondre à ce genre de sollicitations, un composant doit s être enregistré dans le système comme capable de gérer ce type d actions (manifest) Si plusieurs composants sont enregistrés pour une même action, un choix est présenté à l utilisateur Exemples : montrer une localisation dans Google maps, partager un objet (envoyé avec twitter, mailer, etc. ) 14 / 67

Intent implicite Intent implicite : cycle de vie 1 L activité A crée un Intent implicite et utilise startactivity 2 Le système parcours les applications pour trouver un filtre (intent filter) correspondant à l action demandée 3 Le système démarre l activité B : elle correspond à la demande 15 / 67

Intent implicite Intent implicite, exemple de construction : Attention : si aucune application n est disponible et que la vérification n est pas effectuée alors l application plante 16 / 67

Intent implicite Action.SEND, plusieurs applications : L utilisateur a alors la possibilité de définir un choix par défaut afin de ne plus avoir à faire la sélection 17 / 67

Intent implicite Forcer la sélection avec createchooser 18 / 67

Réception d un Intent implicite : <intent-filter> Réception d un Intent implicite Déclaration d un intent filter Pour pouvoir recevoir un intent implicite, il faut déclarer un <intent-filter> pour le composant dans le manifest Chaque <intent-filter> définit le type d intent accepté en spécifiant : le type d action : balise <action> la catégorie : balise <category> le type de donnée accepté (optionnel) : balise <data> avec divers attributs (scheme, host, port, path, etc.) Note : Un intent explicite est toujours délivré, quelque soit le filtre associé au composant Note : <category> est obligatoire pour pouvoir recevoir un intent implicite (CATEGORY_DEFAULT au pire) 20 / 67

Réception d un Intent implicite : <intent-filter> Exemple de <intent-filter> Une activité capable de traiter les Action.SEND (partage) dont le contenu est de type texte : Note : Il est possible d avoir plusieurs balises de chaque type pour élargir le champ des intents capturés (attention aux combinaisons) Note : Si il est nécessaire de définir différentes combinaisons, alors il faut créer plusieurs filtres différents 21 / 67

Réception d un Intent implicite : <intent-filter> Autres exemples Pour un launcher classique : 22 / 67

Réception d un Intent implicite : <intent-filter> Autres exemples Deux filtres pour une même activité : 23 / 67

Résolution des intents implicites Résolution des intents : recherche d une application La recherche d une activité compatible à un intent se fait selon la manière dont un filtre définit : L action La description des données contenues dans l intent (URI et type) La catégorie de l intent 25 / 67

Résolution des intents implicites Filtrage de l action Un filtre peut déclarer de zéro à plusieurs actions : réussite du test lié à l action Pour passer ce filtre, l action de l intent doit correspondre à l une des actions spécifiées dans le filtre Si le filtre ne définit aucune action, tous les intents ratent le test Si l intent ne définit aucune action, le test réussit dès lors que le filtre définit au moins une action 26 / 67

Résolution des intents implicites Filtrage de la catégorie Un filtre peut déclarer de zéro à plusieurs catégories : réussite du test lié à la catégorie Pour passer ce filtre, toutes les catégories définies dans l intent doivent correspondre à l une des catégories spécifiées dans le filtre. L inverse n est pas nécessaire. Un intent sans catégorie passe toujours ce test (car il est automatiquement associé à la catégorie CATEGORY_DEFAULT) Ainsi, un filtre doit au moins avoir la catégorie CATEGORY_DEFAULT pour pouvoir recevoir des intents implicites 27 / 67

Résolution des intents implicites Filtrage du type des données Un filtre peut déclarer de zéro à plusieurs types de données : 28 / 67

Résolution des intents implicites Détails d une balise <data> Chaque balise <data> spécifie : le type de données : le MIME type la structure acceptée pour l URI, pour chacune de ses parties : <scheme>://<host>:<port>/<path> content://com.example.project:200/folder/subfolder/etc scheme = content host = com.example.project port = 200 path = /folder/subfolder/etc 29 / 67

Résolution des intents implicites Filtrage de l URI La description de chaque partie de l URI est optionnelle mais si scheme n est pas spécifié, host est ignoré si host n est pas spécifié, port est ignoré si scheme et host sont tous les deux absents, path est ignoré Note : il est possible d utiliser * pour définir le type de path accepté 30 / 67

Résolution des intents implicites Filtrage global de <data> Règles d acceptation : URI + type MIME Si l intent ne définit ni l un ni l autre, le filtre ne le doit pas non plus Un intent ne contenant que le type MIME est accepté si le filtre ne définit pas d URI et correspond au type MIME Si l intent contient les deux, le filtre le doit aussi le type MIME de l intent peut être inféré de l URI : Si le filtre contient uniquement le type MIME, il supporte les URI dont le scheme est de type content: et file: (ressource locale) 31 / 67

Résolution des intents implicites Autre exemple de filtre courant Le composant est capable de gérer les URI qui correspondent à des vidéos disponibles depuis une adresse internet : 32 / 67

android.provider.alarmclock.action_set_alarm Créer une alarme AlarmClock Nécessite d ajouter dans le manifest : 34 / 67

ACTION_SET_ALARM : intent_filter associé 35 / 67

android.provider.alarmclock.action_set_timer Créer un compte à rebours AlarmClock Nécessite d ajouter dans le manifest : 36 / 67

ACTION_SET_TIMER : intent_filter associé 37 / 67

Intent.ACTION_INSERT Ajouter un événement au calendrier Intent 38 / 67

ACTION_INSERT : intent_filter associé 39 / 67

MediaStore.ACTION_IMAGE_CAPTURE ou (VIDEO) Récupérer une image ou une viédo MediaStore 40 / 67

MediaStore.ACTION_IMAGE_CAPTURE : intent_filter associé 41 / 67

Still image mode filtre associé : 42 / 67

Sélection d un contact : 43 / 67

Uniquement le numéro d un contact : 44 / 67

À partir de l URI précédente : Lancer l affichage un contact : Lancer l édition un contact : 45 / 67

Insertion d un contact : 46 / 67

Composer un mail ACTION_SENDTO (for no attachment) ACTION_SEND (for one attachment) ACTION_SEND_MULTIPLE (for multiple attachments) 47 / 67

Composer un mail (pas de pièce jointe) 48 / 67

filtres associés 49 / 67

Récupérer un fichier android.content.intent ACTION_GET_CONTENT : copie du fichier ACTION_OPEN_DOCUMENT : ouverture du fichier géré par une autre application, URI de type content: ACTION_CREATE_DOCUMENT : création d une nouvelle URI de type content: 50 / 67

Récupérer une photo (URI + données) 51 / 67

filtre associé 52 / 67

Ouvrir une photo (URI + données) 53 / 67

Vélo tracking filtre associé : 54 / 67

Course à pied filtre associé : 55 / 67

Rythme cardiaque filtre associé : 56 / 67

Marche à pied 57 / 67

Actions localisées filtre associé : 58 / 67

Actions localisées Schéma des URI de type geo : geo :latitude,longitude geo :47.6,-122.3 geo :latitude,longitude?z=zoom geo :47.6,-122.3?z=11 geo :0,0?q=lat,lng(label) geo :0,0?q=34.99,-106.61(Treasure) geo :0,0?q=my+street+address geo :0,0?q=1600+Amphitheatre+Parkway%2C+CA 59 / 67

filtre associé 60 / 67

Média 61 / 67

filtre associé 62 / 67

Initier un appel Nécessite <uses-permission android:name="android.permission.call_phone"/> 63 / 67

filtre pour activer la recherche dans une application 64 / 67

Recherche web 65 / 67

Autres 66 / 67

Conclusion Résumé global Il existe déjà énormément d intents implicites! Utilisez la doc pour vous y retrouver : android.content.intent Ce cours reprend largement les tutoriaux en ligne proposés par Google : Android developers 67 / 67