PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. ·...

90
PROGRAMMATION ANDROID Ahcène Bounceur Université de Bretagne Occidentale 1

Transcript of PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. ·...

Page 1: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

PROGRAMMATION ANDROID

Ahcène Bounceur

Université de Bretagne Occidentale

1

Page 2: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

COMMUNICATION ENTRE APPLICATIONS : INTENTS

2

Chapitre 3

Page 3: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Au cœur du système Android, les Intents forment un mécanisme

sophistiqué et complet permettant aux activités et aux applications

d'interagir entre elles.

3

Page 4: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

IDÉE DES INTENTS

¢ La philosophie d'Android� Les activités sont petites et utilisent un seul écran.

¢ Conséquence� Un besoin d'une approche simple pour passer d'une

activité à une autre¢ Approche : utiliser les Intents

� Une description de l'opération à effectuer� Elle peut référencer un nom de classe d'une activité ou

d'une URI� Dans tous les cas, une nouvelle activité doit être décrite

dans le fichier AndroidManifest.xml afin de pouvoir l'invoquer.

4

Page 5: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

COMMUNICATION ENTRE APPLICATIONS

¢ La communication interne du système Android est basée sur l'envoi et la réception de messages exprimant l'intention d'une action.

5

Intent = Intention

Anglais Anglais/Français

Page 6: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

COMMUNICATION ENTRE APPLICATIONS

¢ L'envoi des Intents au système se fait de deux façons : � soit en ciblant un composant précis d'une application

(mode explicite), � soit en laissant le système déléguer le traitement (ou

non) de cette demande au composant le plus approprié (mode implicite).

¢ Un système de filtres permet à chaque application de filtrer et de gérer uniquement les Intents qui sont pertinents pour celle-ci.

¢ Une application peut ainsi être dans un état d'inactivité, tout en restant à l'écoute des intentions circulant dans le système.

6

Page 7: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

PRINCIPE DE FONCTIONNEMENT

¢ Les objets Intent ont essentiellement trois utilisations : ils permettent� de démarrer une activité au sein de l'application

courante� de solliciter d'autres applications � d'envoyer des informations.

¢ Les Intents ont aussi d'autres utilisations, dont le démarrage d'un service (par exemple pour un service de lecteur multimédia, les actions pourront être de lire une musique, passer à la chanson suivante ou encore mettre la lecture en pause en cas d'appel entrant).

7

Page 8: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

PRINCIPE DE FONCTIONNEMENT

¢ Il est aussi possible de vouloir diffuser un objet Intent à plusieurs applications (par exemple pour informer l'ensemble des applications ouvertes que la batterie est défaillante).

8

Page 9: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent

Intent intent = new Intent();

9

Page 10: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent avec une Action

Intent intent = new Intent(String action)

10

Page 11: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent avec une Action

Intent intent = new Intent();intent.setAction(String action)

11

Page 12: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Récupérer l’Action d’une Intent

String action = intent.getAction();

12

Page 13: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent avec une Action et une donnée

Intent intent = new Intent(String action, Uri uri)

13

Page 14: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent avec une Donnée

Intent intent = new Intent();intent.setData(Uri data)

14

Page 15: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Récupérer la donnée d’une Intent

Uri data = intent.getData();

15

Page 16: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent avec des Catégories

Intent intent = new Intent();intent.addCategory(String category1)intent.addCategory(String category2)intent.addCategory(String category3)...

16

intent.removeCategory(String category)

Page 17: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Récupérer les catégories d’une Intent

Set<String> categories = intent.getCategories();

17

Page 18: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer/Supprimer une Intent avec des Flags

Intent intent = new Intent();

intent.addFlags(int flag1)intent.addFlags(int flag2)intent.addFlags(int flag3)ouintent.addFlags(flag1 | flag2 | flag3)

intent.removeFlags(int flags)

18

Page 19: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer/Supprimer une Intent avec des Flags

Intent intent = new Intent();

intent.addFlags(64)intent.addFlags(16)intent.addFlags(1)ouintent.addFlags(64 | 16 | 1)

intent.removeFlags(int flags)

19

Page 20: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer/Supprimer une Intent avec des Flags

Intent intent = new Intent();

intent.addFlags(81)

intent.removeFlags(int flags)

20

Page 21: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer/Supprimer une Intent avec des Flags

Intent intent = new Intent();

intent.addFlags(64 | 16)intent.addFlags(1)intent.removeFlags(17)

intent.getFlags() = ?

21

Page 22: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer/Supprimer une Intent avec des Flags

Intent intent = new Intent();

intent.addFlags(64 | 16) // 1010000intent.addFlags(1) // 1010001intent.removeFlags(17) // 1000000

intent.getFlags() = 64; // 1000000

22

Page 23: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Récupérer les Flags d’une Intent

int flags = intent.getFlags();

23

int ?1010001 (tous les flags)=0000001 (flag 1)ou0010000 (flag 2)ou1000000 (flag 3)

81

1

16

64

Page 24: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

INTENT COMME HASHMAP

24

Intent intent = new Intent();

intent.putExtra("a", "Salut");intent.putExtra("b", "Bonjour");intent.putExtra("c", 15);

String v1 = intent.getStringExtra("a");String v2 = intent.getStringExtra("b");Integer v3 = intent.getIntExtra("c", -1);

System.out.println(v1);System.out.println(v2);System.out.println(v3);

Page 25: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent avec des Données

Bundle bundle = new Bundle()bundle.putString(String clé1, String valeur1)bundle.putInt(String clé2, int valeur2)...

Intent intent = new Intent()intent.putExtras(bundle)

25

putXXXX = putBoolean, putBooleanArray, putDouble, putDoubleArray, putString, putStringArray, etc.

Page 26: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Récupérer les données d’une Intent

Intent intent = getIntent()Bundle bundle = intent.getExtras()

String s = bundle.getString(String clé1)int i1 = bundle.getInt(String clé2)int i2 = bundle.getInt(String clé3, int v)

...

26

getXXXX = getBoolean, getBooleanArray, getDouble, getDoubleArray, getString, getStringArray, etc.

Page 27: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent avec des Données

Intent intent = new Intent()

intent.putExtra(String clé1, String valeur1)intent.putExtra(String clé2, int valeur2)...

27

Page 28: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer les données d’une Intent

Intent intent = getIntent()

String s = intent.getStringExtra(String clé1)int i = intent.getIntExtra(String clé2, int v)

...

28

getXXXXExtra = getBooleanExtra, getDoubleExtra, getStringExtra, getStringArrayExtra, etc.

Page 29: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE ACTIVITÉ DE MANIÈREEXPLICITE

29

Page 30: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

NAVIGUER ENTRE ÉCRANS AU SEIN D'UNE APPLICATION

¢ Une application est souvent composée de plusieurs écrans qui s'enchaînent les uns à la suite des autres en fonction de l'utilisateur et chaque écran est représenté par une activité définissant son interface utilisateur et sa logique.

30

Page 31: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

NAVIGUER ENTRE ÉCRANS AU SEIN D'UNE APPLICATION

¢ Il existe deux méthodes pour démarrer une activité, en fonction de la logique de l'interface : � parfois nous aurons besoin de savoir comment s'est

déroulée l'activité (et obtenir un retour lors de son arrêt), � parfois non

31

Page 32: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

LA CLASSE INTENT : CONSTRUCTEUR

� De manière explicite (avec les Intents) :

Intent intent = new Intent(Context, Class);

¢ Le constructeur de la classe Intent prend les paramètres suivants : � Context : le contexte à partir duquel l'Intent est créé et sera

envoyé. Ce paramètre fait référence la plupart du temps à l'activité en cours pointée par le mot clef this ;

� Class<?> : un type de classe Java héritant de la classe Activity.

32

Page 33: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent pour laner une activité/service

¢ De manière explicite (avec les Intents) :

Intent intent = new Intent(context, MonActivite.class);

Intent intent = new Intent(context, MonService.class);

33

Page 34: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent pour laner une activité/service

¢ De manière explicite (avec les Intents) :

Intent intent = new Intent(context, MonActivite.class);intent.setAction(String action)

Intent intent = new Intent(context, MonService.class);intent.setAction(String action)

34

Page 35: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Créer une Intent pour laner une activité/service

¢ De manière explicite (avec les Intents) :

Intent intent = new Intent(context, MonActivite.class);intent.setAction(String action)intent.addCategory(String categorie)intent.addFlags(int flags)

Intent intent = new Intent(context, MonService.class);intent.setAction(String action)intent.addCategory(String categorie)intent.addFlags(int flags)

35

Page 36: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Lancer une Activité

¢ De manière explicite (avec les Intents) :

startActivity(Intent intent)

startActivityForResult(Intent intent, int rc)

36

requestCode

Page 37: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

LANCER UN SERVICE

¢ De manière explicite (avec les Intents) :

startService(Intent intent)

startForegroundService(Intent intent)

37

Version : OREO

Page 38: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE ACTIVITÉ

¢ De manière explicite (avec les Intents) :

Intent intent = new Intent(this, MySubActivity.class);

startActivity(intent);

38

Le nom de la classe à lancer

Page 39: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE ACTIVITÉ

¢ De manière explicite (avec les Intents) :

Intent intent = new Intent(uneActivite, MySubActivity.class);intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);uneActivite.startActivity(intent);

39

Lorsque l’intent est appelée à partir d’une classe qui n’est pas une activité !

Page 40: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ

¢ Quatre cas :� Cas 1 :

¢ sans échange de données (A) ¢ envoi de données à l’activité secondaire "Intent" (B)

� Cas 2 : récupération de la valeur requestCode� Cas 3 : utilisation de la valeur de resultCode. Cette valeur est

utilisée pour recevoir une donnée liée à un choix,� Cas 4 : réception de données de l’activité secondaire "intent"

40

Page 41: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1

41

Activité 1 Activité 2

startActivity(intent)

finish()

Page 42: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

CAS 1 (A)

42

Page 43: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (A)Sans envoi de données

¢ Considérons deux activités :� Une activité principale : MyActivity� Une activité secondaire (sous-activité) : MySubActivity

43

Page 44: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (A)Sans envoi de données

¢ L'activité principale : MyActivity

public class MyActivity extends Activity {@Overridepublic void onCreate(Bundle svInstSt) {

super.onCreate(svInstSt);setContentView(R.layout.main);

}}

44

Page 45: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (A)Sans envoi de données

¢ L'activité principale : MyActivity

45

Page 46: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (A)Sans envoi de données

¢ L'activité principale : MyActivity

public class MyActivity extends Activity {@Overridepublic void onCreate(Bundle svInstSt) {

super.onCreate(svInstSt);setContentView(R.layout.main);

}

public void lancer(View v) {Intent intent = new Intent(this,MySubActivity.class);startActivity(intent);

}}

46

Page 47: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

¢ L'activité secondaire : MySubActivity

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (A)Sans envoi de données

47

Page 48: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

¢ L'activité secondaire : MySubActivity

public class MySubActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.main2);

}

public void lancer(View v) {finish();

}

}

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (A)Sans envoi de données

48

Page 49: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

CAS 1 (B)

49

Page 50: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (B)

¢ Envoyer des données par une Intent ou un Bundle� Un Bundle va contenir les données qui seront utilisées

par la nouvelle activité. Il ressemble à une Map.� Il faut attacher un Bundle à une Intent.

50

Page 51: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (B)Avec envoi de données

¢ L'activité principale : MyActivity

public class MyActivity extends Activity {...public void lancer(View v) {

Intent intent = new Intent(this, MySubActivity.class);

intent.addAction("action1");

startActivity(intent);}

}

51

Page 52: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (B)Avec envoi de données

¢ L'activité principale : MyActivity

public class MyActivity extends Activity {...public void lancer(View v) {

Intent intent = new Intent(this, MySubActivity.class);

intent.addAction("action1");

intent.putExtra("a", 10);

startActivity(intent);}

}

52

Page 53: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (B)Avec envoi de données

¢ L'activité secondaire : MySubActivity

public class MySubActivity extends Activity {...public void tester(View v) {

Intent intent = getIntent();

String s = intent.getAction();

int x = intent.getIntExtra("a", -1);

if(s.equals("action1") {...}}

}

53

L’Intentde l’activité MyActivity

s = "action1"

x = 10

Page 54: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 1 (B)Avec envoi de données

¢ L'activité secondaire : MySubActivity

public class MySubActivity extends Activity {...public void tester(View v) {

Intent intent = getIntent();String s = intent.getAction();int x = intent.getIntExtra("a", -1);int y = 0 ;if(s.equals("action1") {

y = x * 2 ;} else {

y = x + 2 ;}

}}

54

Page 55: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

CAS 2

55

Page 56: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Activité 1

LA MÉTHODE ONACTIVITYRESULT

¢ La méthode onActivityResult :

56

Activité 2

startActivityForResult(intent, rc)

finish()onActivityResult(a, b, c) {...

}

Page 57: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

LA MÉTHODE ONACTIVITYRESULT

¢ La méthode onActivityResult :

57

public class MyActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.main2);

}

@Overrideprotected void onActivityResult(int a, int b, Intent c) {

// a : request code// b : result code// c : intent

}

}

Page 58: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

LA MÉTHODE ONACTIVITYRESULT

¢ La méthode onActivityResult utilise trois

paramètres pour identifier l'activité et ses valeurs

de retour :

� int requestCode : valeur identifiant quelle activité a

appelé la méthode. Cette valeur a été spécifiée comme

paramètre de la méthode startActivityForResult,� int resultCode : représente la valeur de retour envoyée

par la sous-activité pour signaler son état à la fin de la

transaction,

� Intent intent : cet objet permet d'échanger des

données.

58

Page 59: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

LA MÉTHODE ONACTIVITYRESULT¢ La méthode onActivityResult :

59

startActivity(intent) finish()

startActivityForResult(intent, a) finish()

onActivityResult(a, b, c)

startActivityForResult(intent, a) setResult(x)finish()

onActivityResult(a, x, c)

startActivityForResult(intent, a) setResult(x, c)finish()

onActivityResult(a, x, c)

Activité 1 Activité 2

Page 60: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2

¢ requestCode : quelle fenêtre a été choisie ?

Fenêtre principale

Fenêtre 1

Fenêtre 2

public void onClick1(View v) {Intent intent = new Intent(this, MySubActivity1.class);startActivityForResult(intent, 1)

}

public void onClick2(View v) {Intent intent = new Intent(this, MySubActivity2.class);startActivityForResult(intent, 2)

}

Page 61: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

¢ requestCode : quelle fenêtre a été choisie ?

61

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2

startActivityForResult(intent, 1)

Fenêtre principale

Fenêtre 1

Page 62: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2

¢ requestCode : quelle fenêtre a été choisie ?

62

Fenêtre principale

Fenêtre 1

startActivityForResult(intent, 1)

finish()

onActivityResult(requestCode, resultCode, intent)= 1

Page 63: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

63

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2

¢ requestCode : quelle fenêtre a été choisie ?

startActivityForResult(intent, 2)

Fenêtre 2

Fenêtre principale

Page 64: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

¢ requestCode : quelle fenêtre a été choisie ?

Fenêtre 2

64

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2

Fenêtre principale

startActivityForResult(intent, 2)

finish()

onActivityResult(requestCode, resultCode, intent)= 2

Page 65: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2

¢ requestCode : quelle fenêtre a été choisie ?¢ L'activité principale : MyActivity

public class MyActivity extends Activity {

private static final int CODE1 = 1;private static final int CODE2 = 2;

@Overridepublic void onCreate(Bundle svInstSt) {

super.onCreate(svInstSt);setContentView(R.layout.main);

}}

65

Page 66: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2

¢ requestCode : quelle fenêtre a été choisie ?¢ L'activité principale : MyActivity

.../...protected void onActivityResult(int requestCode, int resultCode , Intent intent) {

// Afficher requestCode}public void onClick1(View v) {

Intent intent = new Intent(this, MySubActivity1.class);startActivityForResult(intent, CODE1);

}public void onClick2(View v) {

Intent intent = new Intent(this, MySubActivity2.class);startActivityForResult(intent, CODE2);

}} 66

Page 67: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 2

¢ requestCode : quelle fenêtre a été choisie ?¢ Les activités secondaires :

public class MySubActivity1 extends Activity {public void onCreate(Bundle savedInstanceState) {...}public void onClick(View v) {

finish() ;}

}

public class MySubActivity2 extends Activity {public void onCreate(Bundle savedInstanceState) {...}public void onClick(View v) {

finish() ;}

}67

Page 68: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

CAS 3

68

Page 69: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 3

¢ Considérons deux activités :� Une activité principale : MyActivity� Une activité secondaire (sous-activité) : MySubActivity

69

Page 70: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 3

¢ L'activité principale : MyActivity

public class MyActivity extends Activity {private static final int CODE_MON_ACTIVITE = 1;

@Overridepublic void onCreate(Bundle svInstSt) {

super.onCreate(svInstSt);setContentView(R.layout.main);

}}

70

Page 71: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 3

¢ L'activité principale : MyActivity

71

public void lancer(View v) {Intent intent = new Intent(this,MySubActivity.class);startActivityForResult(intent, CODE_MON_ACTIVITE);

}

Page 72: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

¢ L'activité secondaire : MySubActivity

public class MySubActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.main2);

}}

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 3

72

Page 73: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

¢ L'activité secondaire : MySubActivity

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 3

73

public void onClick1(View v) {setResult(1);finish();

}

public void onClick2(View v) {setResult(2);finish();

}

public void onClick3(View v) {setResult(3);finish();

}

Page 74: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 3

¢ L'activité principale : MyActivity@Override

protected void onActivityResult(int requestCode, int resultCode , Intent intent) {String reponse = "Le numéro choisi est : " ;

if(resultCode == 1) {reponse += "1" ;

}if(resultCode == 2) {

reponse += "2" ; }

if(resultCode == 3) {reponse += "3" ;

}

Toast.makeText(this , reponse , Toast.LENGTH_SHORT).show();TextView tf = (TextView)findViewById(R.id.textView1);tf.setText(reponse);

}

74

Page 75: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 3

¢ Remarque 1 : � resultCode peut prendre les valeurs suivantes :

¢ RESULT_OK¢ RESULT_CANCELED¢ RESULT_FIRST_USER¢ Etc.

75

Page 76: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉMARRER UNE SOUS-ACTIVITÉ : Cas 3

¢ Remarque 2 : � Rien n’empêche d’utiliser resultCode pour mettre à jour

une variable entière à partir d’une autre activité.

76

Page 77: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

CAS 4

77

Page 78: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Envoyer les données de l’activité principale à l’activité secondaire (Cas 4)

¢ L'activité principale : Intent intent = new Intent(this, Activite2.class);intent.putExtra("a", 45);intent.putExtra("b", "message");startActivityForResult(intent);

¢ L’activité secondaire :

Intent intent = getIntent();int x = intent.getIntExtra("a", -1);String s = intent.getStringExtra("b");

78

Page 79: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

Envoyer les données de l’activité secondaire à l’activité principale (Cas 4)

¢ L’activité principale :� Il faut utiliser la méthode startActivityForResult pour

lancer l’activité secondaire

¢ L'activité secondaire : setResult(resultCode, intent);

79

@Override protected void onActivityResult(int requestCode, int resultCode , Intent intent) {

...

}

Activité principale

Attention : L’Intent dans l’activité secondaire doit être créée.

Exemple :Intent intent = new Intent();//on peut ajouter une action s’il le fautintent.putExtra(...)Intent.putExtras(...) ...

Page 80: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

SOLLICITER D'AUTRES APPLICATIONS

¢ L'envoi d'un Intent permet également de demander à un composant d'une autre application que la vôtre de traiter l'action que vous souhaiteriez réaliser.

¢ C'est le système qui décide de l'application à utiliser pour accomplir votre souhait.

¢ Pour décider du composant le plus approprié, le système se base sur les informations que vous spécifiez dans votre objet Intent :� action,� données,� catégorie,� etc.

80

Page 81: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉLÉGUER AU SYSTÈME LE CHOIX DE L'APPLICATION

¢ Il est possible d'envoyer une intention et demander au système de choisir le composant le plus approprié pour exécuter l'action transmise.

¢ Exemple : composer un numéro de téléphone� Un Intent doit être créé� Utilisation de valeurs complémentaires pour le

constructeur� Action : ACTION_DIAL� Donnée : une URI comportant le numéro à appeler� Il n'est pas nécessaire de préciser le nom de la

classe à lancer : Le système décide de l'application à ouvrir

81

Page 82: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉLÉGUER AU SYSTÈME LE CHOIX DE L'APPLICATION

¢ Exemple : composer un numéro de téléphone

Uri uri = Uri.parse("tel:0612345678"); Intent intent = new Intent(Intent.ACTION_CALL, uri); startActivity(intent)

82

URI (Uniform Ressource Identifier) Exemple : tel, www, etc.

Page 83: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

DÉLÉGUER AU SYSTÈME LE CHOIX DE L'APPLICATION

¢ Appel téléphonique (version 6 et +) : la demande de permission doit être faite aussi par programmation :

int permissionCheck =

ContextCompat.checkSelfPermission(activity,

Manifest.permission.CALL_PHONE);

if (permissionCheck == PackageManager.PERMISSION_GRANTED) {

Uri uri = Uri.parse("tel:0612345678");

Intent intent = new Intent(Intent.ACTION_CALL, uri);

startActivity(intent)

}

83

Page 84: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

ACCORDER LES PERMISSIONS LIÉES AUX ACTIONS

¢ Si la permission d'effectuer un appel direct n'est pas déterminé dans le fichier de configuration (AndroidManifest.xml) l'application du téléphone ne sera pas lancée

¢ Il faut ajouter dans le fichier de configuration la ligne suivante :

<uses-permission android:name="android.permission.CALL_PHONE"

/>

84

Page 85: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

EXEMPLE 1 :

¢ Démarrer un navigateur internet :

Uri uri = Uri.parse("http://www.iorgame.com/");Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);

85

Page 86: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

EXEMPLE 2 :

¢ Recherche sur le web :

String recherche = "master 2 lse";

Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);

intent.putExtra(SearchManager.QUERY, recherche);

startActivity(intent);

86

Action

Page 87: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

EXEMPLES 3 : RENDRE LE BLUETOOTH VISIBLE DURANT 2MN

Intent intent = new Intent("android.bluetooth.adapter.action.REQUEST_DISCOVERABLE");

intent.putExtra("android.bluetooth.adapter.extra.DISCOVERABLE_DURATION", 120);

startActivity(intent);

87

Action

Clé d’une donnée de l’intent Valeur de la donnée(120 secondes : 2mn)

Page 88: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

LES ACTIONS NATIVES

¢ ACTION_ANSWER� Prendre en charge un appel entrant.

¢ ACTION_CALL� Appeler un numéro de téléphone.

¢ ACTION_DELETE� Démarrer une activité permettant de supprimer une

donnée identifiée par l'URI spécifiée en paramètre.¢ ACTION_DIAL

� Afficher l'interface de composition des numéros.¢ ACTION_EDIT

� Éditer une donnée

88

Page 89: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

LES ACTIONS NATIVES

¢ ACTION_SEARCH� Démarrer une activité de recherche.

¢ ACTION_SEND� Envoyer des données texte ou binaire par courriel ou SMS.

¢ ACTION_SENDTO� Lancer une activité capable d'envoyer un message au contact

défini par l'URI spécifiée en paramètre.¢ ACTION_VIEW

� Démarrer une action permettant de visualiser l'élément identifié par l'URI spécifiée en paramètre.

¢ ACTION_WEB_SEARCH� Effectuer une recherche sur Internet avec l'URI spécifiée en

paramètre comme requête. 89

Page 90: PROGRAMMATION ANDROIDlabsticc.univ-brest.fr/~bounceur/cours_pdf/android/... · 2019. 11. 14. · IDÉE DES INTENTS ¢ La philosophie d'Android Les activités sont petites et utilisent

90