Вы находитесь на странице: 1из 7

Principe

57

Partie 3
56

INTENTS

Les Intents permettent de grer l'envoi et la rception de messages

afin de faire cooprer les applications. Le but des Intents est de


dlguer une action un autre composant, une autre application ou
une autre activit de l'application courante.
On peut envoyer des Intents informatifs pour faire passer des

messages. Mais on peut aussi envoyer des Intents servant lancer


une nouvelle activit.
Dveloppement sous Android - Mlle TRIMECH R

Dveloppement sous Android - Mlle TRIMECH R

Principe

59

58

Classification des Intents

Un objet Intent contient les information suivantes:

le nom du composant cibl (facultatif)

l'action raliser, sous forme de chaine de caractres

les donnes: contenu MIME et URI

des donnes supplmentaires sous forme de paires clef/valeur

Premire
Section

Explicites

Implicites

(key/value)

une catgorie pour cibler un type d'application

des drapeaux (flags /informations supplmentaires)

Dveloppement sous Android - Mlle TRIMECH R

Intents

Dveloppement sous Android - Mlle TRIMECH R

Premire Classification

Intent Explicite

60

61

Intent Explicite
Spcifie

Intent Implicite

le composant dmarrer par nom

Ne

(nom complet de la classe)


Permet

nomme pas un composant spcifique,

crer l'Intent et passer la classe de l'activit cible par l'Intent:

mais dclarent une action raliser

de dmarrer un composant de

Permet

votre propre application, car le nom de la

dappeler un composant dune autre


application

dmarrer une activit en

rponse laction dun utilisateur

Intent login = new Intent(this, GiveLogin.class);


startActivity(login);

un composant dune application

classe est connu


Exemple:

Si l'on passe la main une activit interne l'application, on peut

Exemple: montrer lutilisateur un

emplacement sur une Map

Le premier paramtre de construction de l'Intent est en fait le

contexte de l'application. Dans certain cas, il ne faut pas mettre


this mais faire appel getApplicationContext() si l'objet
manipulant l'Intent n'hrite pas de Context.
Dveloppement sous Android - Mlle TRIMECH R

Dveloppement sous Android - Mlle TRIMECH R

Intent Implicite

Exemple

62

63

S'il s'agit de passer la main une autre application, on donne au

Pour lancer un appel partir dune activit A :


1.

constructeur de l'Intent les donnes et l'URI cible:


l'OS est charg de trouver une application pouvant rpondre l'Intent.

Activit A cre un Intent avec une action et le passe en paramtre la


mthode startActivity .

2.

Le systme Android cherchent toutes les applications pour trouver un Intent


Filter qui correspond cet Intent.

3.

Quand une correspondance est trouve, le systme dmarrent lactivit


demande en invoquant sa mthode onCreate et en lui passant lintent
Uri telnumber = Uri.parse("tel:0248484000");
Intent call = new Intent(Intent.ACTION_DIAL, telnumber);
startActivity(call);

Dveloppement sous Android - Mlle TRIMECH R

Dveloppement sous Android - Mlle TRIMECH R

Intent + Action : Oui cest possible!

Et en cas dinexistence .

64

65

On peut associer le lancement dun intent une action:

Pour viter que lapplication crash si lactivit appele

nexiste pas:
Button b = (Button)findViewById(R.id.Button01);
b.setOnClickListener(new OnClickListener() {

Uri telnumber = Uri.parse("tel:0248484000");

public void onClick(View v) {

Intent call = new Intent(Intent.ACTION_DIAL, telnumber);

Uri telnumber = Uri.parse("tel:0248484000");

if(call.resolveActivity(getPackageManager())!=null) {
startActivity(call);

Intent call = new Intent(Intent.ACTION_DIAL, telnumber);


}

startActivity(call);

else {

Toast.makeText(this,"activit introuvable",Toast.LENGTH_LONG).show();

});

Dveloppement sous Android - Mlle TRIMECH R

Dveloppement sous Android - Mlle TRIMECH R

Intent Filter

67

66
Un Intent Filter est une expression dans le fichier AndroidManifest.xml dune application qui

Passage de donnes entre les

spcifie le type dintents que le composant veut recevoir.


Permet aux autres activits de lancer directement votre activit en utilisant un certain Intent.
Si vous ne dclarez pas dIntent Filters votre activit, elle ne pourra tre dclenche que par

activits

Deuxime

un Intent Explicite.
Il est recommand de ne pas dclarer d Intent Filters pour les services, car cela peut causer des

Section

problmes de scurit.
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Activit
A

</activity>
Dveloppement sous Android - Mlle TRIMECH R

Dveloppement sous Android - Mlle TRIMECH R

Extras

Activit
B

Principe

Ajout dinformations (Activit A)

68

69

Les Intent permettent de transporter des informations destination de

l'activit cible. On appelle ces informations des Extra:

Lorsqu'on prpare un Intent (au niveau de Activit A) et que l'on souhaite

ajouter une information de type "clef valeur" , on procde ainsi:

Les mthodes permettant de les manipuler sont :

putExtra (envoi : au niveau de lactivit A)

getExtra (rcupration : au niveau de lactivit B)

getExtra

putExtra

rcupration
: au niveau
de lactivit
B

envoi : au
niveau de
lactivit A

Dveloppement sous Android - Mlle TRIMECH R

Intent callactivity2 = new Intent(getApplicationContext(),


Activity2.class);
callactivity2.putExtra("login", "admin");
startActivity(callactivity2);

Dveloppement sous Android - Mlle TRIMECH R

Rcupration dinformations (Activit B)

71

70

Lien bidirectionnel entre les

Du ct de l'activit recevant l'Intent (au niveau de Activit B), on

rcupre l'information de la manire suivante:

Bundle extras = getIntent().getExtras();

Troisime
Section

activits

Activit A

String s = new String(extras.getString("login"));

Activit B
Dveloppement sous Android - Mlle TRIMECH R

Dveloppement sous Android - Mlle TRIMECH R

Principe

Retour dune activit (1)

72

73

Il est possible dtablir un lien bidirectionnel entre deux activits grce un Intent
Pour recevoir un rsultat partir dune autre activit, appeler startActivityForResult

au lieu de startActivity

Lorsque le bouton retour est press, l'activit courante prend fin et

revient l'activit prcdente. Cela permet par exemple de terminer


son appel tlphonique et de revenir l'activit ayant initi l'appel.
Au sein d'une application, une activit peut vouloir rcuprer un code

L activit destination doit tre conue pour renvoyer un rsultat une fois lopration

de retour de l'activit "enfant". On utilise pour cela la mthode


startActivityForResult qui envoie un code de retour l'activit enfant.

sera ralise

Lorsque l'activit parent reprend la main, il devient possible de filtrer le


Le rsultat est envoy sous forme dIntent

code de retour dans la mthode onActivityResult pour savoir si l'on

L activit principale le recevra dans la mthode onActivityResult


Dveloppement sous Android - Mlle TRIMECH R

revient ou pas de l'activit enfant.


Dveloppement sous Android - Mlle TRIMECH R

Principe (2)

Retour dune activit (Activit A)

74

75

Activit A
1. Appel de lintent avec la mthode
startActivityForResult en prcisant un code
denvoi

Activit B
1. Enregistrer un code de retour avec la
mthode setResult

L'appel d'un Intent devient :

public void onCreate(Bundle savedInstanceState) {


...
Intent login = new Intent(getApplicationContext(),
ActiviteB.class);
startActivityForResult(login,48);
... }
Le filtrage dans la classe parente (A) permet de savoir qui avait appel cette activit

enfant (B):
2. Filtrage du rsultat avec la mthode

Mettre fin lactivit B avec la

onActivityResult

mthode finish().

Dveloppement sous Android - Mlle TRIMECH R

protected void onActivityResult(int requestCode, int resultCode,


Intent data)
{
if (requestCode == 48)
Toast.makeText(this, "Code de requte rcupr (je sais d'ou
je viens)", Toast.LENGTH_LONG).show();
}
Dveloppement sous Android - Mlle TRIMECH R

Rsultat dune activit (Activit B)

Rsultat dune activit (Activit A)

76

Il est possible de dfinir un rsultat d'activit, avant d'appeler explicitement la fin

d'une activit avec la mthode finish(). Dans ce cas, la mthode setResult permet
d'enregistrer un code de retour qu'il sera aussi possible de filtrer dans l'activit

77
Le filtrage dans la classe parente (A) permet de savoir :
qui avait appel cette activit enfant (B) requestCode
quavait retourn cette activit enfant (B) resultCode
La classe parente (Activit A) peut filtrer ainsi :

parente.
Dans l'activit enfant (Activit B), on met donc:

Button finish = (Button)findViewById(R.id.finish);


finish.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setResult(50);
finish();
}});
Dveloppement sous Android - Mlle TRIMECH R

protected void onActivityResult(int requestCode, int resultCode, Intent


data)
{
if (requestCode == 48)
Toast.makeText(this, "Code de requte rcupr (je sais d'ou je
viens)", Toast.LENGTH_LONG).show();
if (resultCode == 50)
Toast.makeText(this, "Code de retour ok (on m'a renvoy le bon
code)", Toast.LENGTH_LONG).show();
}
Dveloppement sous Android - Mlle TRIMECH R

Application

79

78

Remarques sur le fichier MANIFEST

Quatrime
Section

Dveloppement sous Android - Mlle TRIMECH R

Dveloppement sous Android - Mlle TRIMECH R

Activits

Permissions

Activits

Permissions (1)

80

81

Une activit ne peut accder certaines ressources matrielles quavec une

Si lapplication est forme par plusieurs activits,

NE

PAS OUBLIER DE DCLARER LES ACTIVITS


DANS LE MANIFEST

Dveloppement sous Android - Mlle TRIMECH R

Elles concernent :

La golocalisation (GPS)

Les accs aux contacts et l'agenda du tlphone

Les modifications de paramtres (orientation, fond dcran )

Les appels tlphoniques

Lenvoi et rception de SMS/MMS

Laudio

Le rseau (dont laccs Internet)

Le matriel (bluetooth, appareil photo, )

Dveloppement sous Android - Mlle TRIMECH R

Permissions (2)
82

ATTENTION : Loubli de permissions provoquera une erreur

dexcution
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-sdk />
<uses-permission android:name="android.permission.CALL_PHONE" />
.
<uses-permission android:name="android.permission.INTERNET " />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
</activity>

Dveloppement sous Android - Mlle TRIMECH R

permission qui doit apparatre dans le Manifest

Вам также может понравиться