D Veloppement Sous Android Part3
-
Upload
king-mehdinho -
Category
Documents
-
view
228 -
download
0
Transcript of D Veloppement Sous Android Part3
-
7/25/2019 D Veloppement Sous Android Part3
1/7
INTENTS
Partie 356
Dveloppement sous Android - Mlle TRIMECH R
Principe
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.
57
Dveloppement sous Android - Mlle TRIMECH R
Principe
Un objet Intentcontient 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
(key/value)
une catgorie pour cibler un type d'application
des drapeaux (flags /informations supplmentaires)
58
Dveloppement sous Android - Mlle TRIMECH R
59
Classification desClassification des IntentsIntents
Premire
Section
Dveloppement sous Android - Mlle TRIMECH R
Intents
Explicites Implicites
-
7/25/2019 D Veloppement Sous Android Part3
2/7
Intent ExpliciteIntent Explicite Intent ImpliciteIntent Implicite
Dveloppement sous Android - Mlle TRIMECH R
Spcifie le composant dmarrer par nom
(nom complet de la classe)
Permet de dmarrer un composant de
votre propre application, car le nom de la
classe est connu
Exemple: dmarrer une activit en
rponse laction dun utilisateur
Ne nomme pas un composant spcifique,
mais dclarent une action raliser
Permet un composant dune application
dappeler un composant dune autre
application
Exemple: montrer lutilisateur un
emplacement sur une Map
60
Premire Classification
Intent Explicite
Dveloppement sous Android - Mlle TRIMECH R
61
Si l'on passe la main une activit interne l'application, on peut
crer l'Intent et passer la classe de l'activit cible par l'Intent:
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'Intentn'hrite pas de Context.
Intent login = new Intent(this, GiveLogin.class);
startActivity(login);
Intent Implicite
Dveloppement sous Android - Mlle TRIMECH R
62
S'il s'agit de passer la main une autre application, on donne au
constructeur de l'Intent les donnes et l'URI cible:
l'OS est charg de trouver une application pouvant rpondre l'Intent.
Exemple
Dveloppement sous Android - Mlle TRIMECH R
63
Pour lancer un appel partir dune activit A :
1. 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);
-
7/25/2019 D Veloppement Sous Android Part3
3/7
Intent + Action : Oui cest possible!
Dveloppement sous Android - Mlle TRIMECH R
64
On peut associer le lancement dun intent une action:
Buttonb= (Button)findViewById(R.id.Button01);
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Uri telnumber = Uri.parse("tel:0248484000");
Intent call = new Intent(Intent.ACTION_DIAL, telnumber);
startActivity(call);
}
});
Et en cas dinexistence .
Dveloppement sous Android - Mlle TRIMECH R
65
Pour viter que lapplication crash si lactivit appele
nexiste pas:
Uri telnumber = Uri.parse("tel:0248484000");
Intent call = new Intent(Intent.ACTION_DIAL, telnumber);
if(call.resolveActivity(getPackageManager())!=null) {
startActivity(call);
}
else {
Toast.makeText(this,"activit introuvable",Toast.LENGTH_LONG).show();
}
Intent Filter
Dveloppement sous Android - Mlle TRIMECH R
66
Un Intent Filter est une expressiondans le fichierAndroidManifest.xml dune application qui
spcifie le type dintents quele composantveut recevoir.
Permetaux autresactivits de lancerdirectement votre activit en utilisantun certainIntent.
Si vous ne dclarez pas dIntent Filters votre activit, elle ne pourra tre dclenche que par
un Intent Explicite.
Il est recommand dene pasdclarer dIntent Filters pour lesservices, car cela peutcauser des
problmes de scurit.
67
Passage de donnes entre lesPassage de donnes entre les
activitsactivitsDeuxime
Section
Dveloppement sous Android - Mlle TRIMECH R
ActivitA
ExtrasActivit
B
-
7/25/2019 D Veloppement Sous Android Part3
4/7
Principe
Dveloppement sous Android - Mlle TRIMECH R
68
putExtra envoi : au
niveau delactivit A
getExtra rcupration
: au niveaude lactivitB
Les Intentpermettent de transporter des informations destination de
l'activit cible. On appelle ces informations des Extra:
Les mthodes permettant de les manipuler sont :
putExtra (envoi : au niveau de lactivit A)
getExtra (rcupration : au niveau de lactivit B)
Ajout dinformations (Activit A)
Dveloppement sous Android - Mlle TRIMECH R
69
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:
Intent callactivity2= new Intent(getApplicationContext(),
Activity2.class);
callactivity2.putExtra("login", "admin");
startActivity(callactivity2);
Rcupration dinformations (Activit B)
Dveloppement sous Android - Mlle TRIMECH R
70
Bundle extras = getIntent().getExtras();
String s = new String(extras.getString("login"));
Du ct de l'activit recevant l'Intent (au niveau de Activit B), on
rcupre l'information de la manire suivante:
71
Lien bidirectionnel entre lesLien bidirectionnel entre les
activitsactivitsTroisime
Section
Dveloppement sous Android - Mlle TRIMECH R
Activit A
Activit B
-
7/25/2019 D Veloppement Sous Android Part3
5/7
Principe
Dveloppement sous Android - Mlle TRIMECH R
72
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
L activit destination doit tre conue pour renvoyer un rsultat une fois lopration
sera ralise
Le rsultat est envoy sous forme dIntent
L activit principale le recevra dans la mthode onActivityResult
Retour dune activit (1)
Dveloppement sous Android - Mlle TRIMECH R
73
Lorsque le bouton retourest 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
de retour de l'activit "enfant". On utilise pour cela la mthode
startActivityForResultqui envoie un code de retour l'activit enfant.
Lorsque l'activit parent reprend la main, il devient possible de filtrer le
code de retour dans la mthode onActivityResultpour savoir si l'on
revient ou pas de l'activit enfant.
Principe (2)
Dveloppement sous Android - Mlle TRIMECH R
74
Activit A Activit B
Mettre fin lactivit B avec la
mthode finish().
1. Enregistrer un code de retour avec la
mthode setResult
2. Filtrage du rsultat avec la mthode
onActivityResult
1. Appel de lintentavec la mthode
startActivityForResult en prcisant un code
denvoi
Retour dune activit (Activit A)
Dveloppement sous Android - Mlle TRIMECH R
75
L'appel d'un Intentdevient :
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):
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();
}
-
7/25/2019 D Veloppement Sous Android Part3
6/7
Rsultat dune activit (Activit B)
Dveloppement sous Android - Mlle TRIMECH R
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 setResultpermet
d'enregistrer un code de retour qu'il sera aussi possible de filtrer dans l'activit
parente.
Dans l'activit enfant (Activit B), on met donc:
Buttonfinish= (Button)findViewById(R.id.finish);
finish.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setResult(50);
finish();
}});
Rsultat dune activit (Activit A)
Dveloppement sous Android - Mlle TRIMECH R
77
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();
}
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 :
Application
Dveloppement sous Android - Mlle TRIMECH R
78
79
Remarques sur le fichier MANIFESTRemarques sur le fichier MANIFEST
Quatrime
Section
Dveloppement sous Android - Mlle TRIMECH R
Activits Permissions
-
7/25/2019 D Veloppement Sous Android Part3
7/7
Activits
Dveloppement sous Android - Mlle TRIMECH R
80
Si lapplication est forme par plusieurs activits, NE
PAS OUBLIER DE DCLARER LES ACTIVITS
DANS LE MANIFEST
Permissions (1)
Dveloppement sous Android - Mlle TRIMECH R
81
Une activit ne peut accder certaines ressources matrielles quavec une
permission qui doit apparatre dans le Manifest
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, )
Permissions (2)
Dveloppement sous Android - Mlle TRIMECH R
82
ATTENTION : Loubli de permissions provoquera une erreurdexcution
.