0% ont trouvé ce document utile (0 vote)
49 vues24 pages

Chap4 Android

Ce document décrit la communication entre applications sur Android à l'aide d'intents. Il explique comment lancer des activités et envoyer des informations entre applications de manière explicite ou implicite.

Transféré par

derouicheaya20
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
49 vues24 pages

Chap4 Android

Ce document décrit la communication entre applications sur Android à l'aide d'intents. Il explique comment lancer des activités et envoyer des informations entre applications de manière explicite ou implicite.

Transféré par

derouicheaya20
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 4:

Communication entre
applications
(Les objets Intent)
Développement mobile sous Android

Developpement mobile sous


1
Android
Introduction
• 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
• Un message émis à destination d’un autre composant:
o de la même application (une activité, un service, etc.)
o celui d’une toute autre application
• Grâce a la classe Intent, ce message permet de véhiculer des:
• Informations au destinataire sur l’action à effectuer et les
données avec lesquelles agir
• Informations nécessaire au système pour son traitement
(catégorie du composante cible et instructions à exécuter)

Developpement mobile sous


2
Android
Introduction
 L’utilisation d’un composant externe peut ainsi être
décidée au moment de l’exécution de
l’application et non lors de la compilation
 Ce mécanisme permet d’éviter les dépendances
 Une application qui permet d’ouvrir une page web
demande au système d’appeler le navigateur par
défaut de l’utilisateur.
 2 types d’envoie d’intent:
 Explicite: en ciblant composant précis d’une application
 Implicite: en laissant le système déléguer le traitement au composant le
plus approprié
 Un système de filtres permet à chaque application
de filtrer les intents pertinentes pour celle ci

Developpement mobile sous


3
Android
Principe de fonctionnement
• L’objet « Intent » est utilisé pour:
1. Démarrer une autre activité
2. Démarrer une autre application
3. Envoyer de l’information

• Le système peut décider quelle application à lancer


pour satisfaire un Intent: La résolution de l’intention.

• Un Intent peut être envoyé à plusieurs application au


même temps (cas de batterie faible)

Developpement mobile sous


4
Android
Principe de fonctionnement

Developpement mobile sous


5
Android
Démarrer une activité (1)
• Pour démarrer une activité EnfantActivity sans
attendre de retour, on utilise la méthode
startActivity avec comme paramètre une instance
de la classe Intent:

Intent intent = new Intent(this,[Link]);


startActivity(intent);

• une erreur du type ActivityNotFoundException sera générée


lors de l’appel de la méthode startActivity si l’activité n’est
pas déclarer dans le fichier manifest.

<application ...>
<activity android:name=".EnafantActivity" />
</application>
Developpement mobile sous
6
Android
Exemple de startActivity()
• Fichier: parent_layout.xml • Fichier: enfant1_layout.xml
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android= <LinearLayout xmlns:android=
"[Link] "[Link]
ndroid" android"
android:orientation="vertical" android:orientation="vertical"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_height="fill_parent"
> >

<Button <TextView
android:layout_width="fill_parent"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:text="Bienvenu dans l'activité
android:text="Appel de l'activité Enfant1 "
Enfant1" />
android:id="@+id/bouton"/> </LinearLayout>

</LinearLayout>

Developpement mobile sous


7
Android
Exemple de startActivity()
• Fichier: [Link] • Fichier: [Link]

public class ParentActivity extends Activity {


Button bouton_1;
public class Enfant1Activity extends
@Override Activity {
public void onCreate(Bundle savedInstanceState) { @Override
[Link](savedInstanceState);
public void onCreate(Bundle
setContentView([Link].parent_layout); savedInstanceState) {
bouton_1=(Button)findViewById([Link]); [Link](savedInstanceState);
setContentView([Link].enfant1_layout
bouton_1.setOnClickListener(new
OnClickListener(){ );
}
public void onClick (View view){
Intent intent=
}
new
Intent([Link],[Link]);
startActivity(intent);
}
}); } }

Developpement mobile sous


8
Android
Démarrer une activité avec
startActivityForResult()
• La méthode startActivityForResult() utilisé pour appeler une
activité « EnfantActivity » et attendre un résultat.
• Cette méthode contient un paramètre requestCode qui
permet d’identifier l’activité à son retour.
• Ce paramètre requestCode sera envoyé de l’activité
parent à l’activité « enfant » et inversement.
• Un résultat resultCode (exp: RESULT_OK ou
RESULT_CANCELED) sera envoyé par l’activité
« EnfantActivity » à l’activité « ParentActivity ».
• La méthode setResult() permet d’envoyer ce résultat de
l’activité « EnfantActivity » vers l’activité « ParentActivity ».
• La methode onActivityResult() permet de recevoir le
resultat dans l’activité « ParentActivity »
Developpement mobile sous
9
Android
Exemple de startActivityForResult()
• Fichier: parent_layout.xml • Fichier: Enfant1_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout
<LinearLayout xmlns:android="[Link]
xmlns:android="[Link] droid"
m/apk/res/android" android:orientation="vertical"
android:layout_width="fill_parent"
android:orientation="vertical" android:layout_height="fill_parent"
android:layout_width="fill_parent" >
android:layout_height="fill_parent" <TextView
> android:layout_width="fill_parent"
android:layout_height="wrap_content"
<Button android:text="Bienvenus dans l'activité Enfant1 "
android:layout_width="fill_parent" />
android:layout_height="wrap_content" <Button
android:text="Appel de l'activité Enfant1" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/bouton1" android:id="@+id/boutonOK1"
/> android:text="OK"
<Button />
android:layout_width="fill_parent" <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Appel de l'activité Enfant2" android:id="@+id/boutonANNULER1"
android:id="@+id/bouton2" android:text="ANNULER"
/> />
</LinearLayout>
</LinearLayout>

Developpement mobile sous


10
Android
Exemple de startActivityForResult()
• Fichier: Enfant2_layout.xml • Fichier: [Link]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout public class ParentActivity extends Activity {
xmlns:android="[Link]
res/android" Button bouton_1;
Button bouton_2;
android:orientation="vertical"
@Override
android:layout_width="fill_parent"
public void onCreate(Bundle savedInstanceState) {
android:layout_height="fill_parent" [Link](savedInstanceState);
> setContentView([Link].parent_layout);
<TextView bouton_1=(Button)findViewById([Link].bouton1);
android:layout_width="fill_parent" bouton_2=(Button)findViewById([Link].bouton2);
android:layout_height="wrap_content" bouton_1.setOnClickListener(new
android:text="Bienvenus dans l'activité Enfant2 " OnClickListener(){
/> public void onClick (View view){
<Button Intent intent=new
android:layout_width="wrap_content" Intent([Link],[Link]);
android:layout_height="wrap_content" startActivityForResult(intent,1);
}
android:id="@+id/boutonOK2"
});
android:text="OK"
bouton_2.setOnClickListener(new
/> OnClickListener(){
<Button public void onClick (View view){
android:layout_width="wrap_content" Intent intent=new
android:layout_height="wrap_content" Intent([Link],[Link]);
android:id="@+id/boutonANNULER2" startActivityForResult(intent,2);
android:text="ANNULER" }
/> });
</LinearLayout> }//on create

Developpement mobile sous


11
Android
Exemple de startActivityForResult()
• Suite du fichier [Link] • Fichier: [Link]
public void onActivityResult (int requestCode, int
resultCode, Intent data){ public class Enfant1Activity extends Activity {
Button B_OK;
switch (requestCode){ Button B_AN;
case (1): switch (resultCode){
case RESULT_OK: @Override
[Link](this,"Enfant1 OK", public void onCreate(Bundle savedInstanceState) {
Toast.LENGTH_SHORT).show(); [Link](savedInstanceState);
return; setContentView([Link].enfant1_layout);
case RESULT_CANCELED:
[Link](this,"Enfant1 Annuler", B_OK=(Button)findViewById([Link].boutonOK1);
Toast.LENGTH_SHORT).show();
return; B_AN=(Button)findViewById([Link].boutonANNULER1);
}
case (2): switch (resultCode){ B_OK.setOnClickListener (new OnClickListener () {
case RESULT_OK: public void onClick (View view) {
[Link](this,"Enfant2 OK", setResult(RESULT_OK);
Toast.LENGTH_SHORT).show(); finish();
return; }
case RESULT_CANCELED: });
[Link](this,"Enfant2 Annuler", B_AN.setOnClickListener (new OnClickListener () {
Toast.LENGTH_SHORT).show(); public void onClick (View view) {
return; setResult(RESULT_CANCELED);
} finish();
}// switch (requestCode }
}//onActivityResult });
}//class ParentActivity }//onCreate
}//class Enfant1Activity

Developpement mobile sous


12
Android
Exemple de startActivityForResult()
• Fichier [Link]
public class Enfant2Activity extends Activity {
Button B_OK;
Button B_AN;
@Override
public void onCreate(Bundle savedInstanceState)
{
[Link](savedInstanceState);
setContentView([Link].enfant2_layout);

B_OK=(Button)findViewById([Link].boutonOK2);
B_AN=(Button)findViewById([Link].boutonANNULER2
);
B_OK.setOnClickListener (new OnClickListener () {
public void onClick (View view) {
setResult(RESULT_OK);
finish();
}
});
B_AN.setOnClickListener (new OnClickListener () {
public void onClick (View view) {
setResult(RESULT_CANCELED);
finish();
}
});
}
}

Developpement mobile sous


13
Android
Transporter des informations avec des
« Intent »
• Les « Intent » peuvent transporter des informations.
• La méthode putextra() de l’objet « intent » permet d’jouter des
couples sous forme « clé/valeur » où la clé est un identifiant
unique permettant d’identifier la donnée dans l’objet « Bundle ».
• Exemple:
Intent intent = new Intent(this,[Link]);
[Link]("maclé", "hello !");
startActivity(intent);
• La récupération des données se fait à travers l’intent envoyé par
la méthode « getExtra() »
• Exemple: Public class AutreActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
Bundle extra = [Link]().getExtras();
if(extra != null)
String data = [Link]("maclé");
… }
}
Developpement mobile sous
14
Android
Exemple d’intent avec des données
• Fichier: parent_layout.xml • Fichier: enfant1_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="[Link]
<?xml version="1.0" encoding="utf-8"?> droid"
<LinearLayout android:orientation="vertical"
xmlns:android="[Link] android:layout_width="fill_parent"
[Link]/apk/res/android" android:layout_height="fill_parent"
>
android:orientation="vertical" <TextView
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_height="fill_parent"> android:id="@+id/textV"
<EditText />
android:layout_width="fill_parent" <Button
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="Entrez votre nom" android:id="@+id/boutonOK"
android:id="@+id/edit" /> android:text="OK"
<Button />
android:layout_width="fill_parent" <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Valider" android:id="@+id/boutonANNULER"
android:id="@+id/bouton" android:text="ANNULER"
/> />
</LinearLayout>
</LinearLayout>

Developpement mobile sous


15
Android
Exemple d’intent avec des données
• Fichier: [Link] • Fichier: [Link]
public class ParentActivity extends Activity { public void onCreate(Bundle savedInstanceState) {
Button bouton; [Link](savedInstanceState);
EditText texte_nom; setContentView([Link].enfant1_layout);
@Override
public void onCreate(Bundle savedInstanceState) {
Bundle infoNom = [Link]().getExtras();
[Link](savedInstanceState);
if(infoNom != null){
setContentView([Link].parent_layout);
bouton=(Button)findViewById([Link]); nom=[Link]("monNom");
[Link](new OnClickListener(){ }
public void onClick (View view){
texte_nom=(EditText)findViewById([Link]); textV=(TextView)findViewById([Link]);
String nom = texte_nom.getText().toString(); [Link]("Bonjour "+nom+" bienvenu dans
Intent intent=new l'activité Enfant1");
Intent([Link],[Link]);
[Link]("monNom", nom); B_OK=(Button)findViewById([Link]);
startActivityForResult(intent,1); B_AN=(Button)findViewById([Link]);
}
}); B_OK.setOnClickListener (new OnClickListener () {
} public void onClick (View view) {
public void onActivityResult (int requestCode, int resultCode,
Intent data){ setResult(RESULT_OK);
switch (resultCode){ finish();
case RESULT_OK: }
[Link](this,"Enfant1 OK", });
Toast.LENGTH_SHORT).show(); B_AN.setOnClickListener (new OnClickListener () {
return; public void onClick (View view) {
case RESULT_CANCELED:
[Link](this,"Enfant1 setResult(RESULT_CANCELED);
Annuler", Toast.LENGTH_SHORT).show(); finish();
return; }
} });
} }
}
Developpement mobile sous
16
Android
Solliciter d’autres applications
• Un « intent » permet aussi de demander un
composant d’une autre application.
• C’est le système qui décide de l’application à
utiliser pour accomplir votre souhait
• Le système se base sur les informations fournit dans
l’intent: action, données, catégorie…

Developpement mobile sous


17
Android
Déléguer au système le choix de
l’application
• Exemple1: appelle d’un numéro de téléphone
Uri uri = [Link]("[Link]
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);

• Exemple 2:
Uri uri = [Link]("[Link]
Intent intent = new Intent(Intent.ACTION_CALL, uri);
startActivity(intent);

• Exemple 3: Affichage d’une page web


Uri uri = [Link]("[Link]
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

Developpement mobile sous


18
Android
Actions natives du système Android

Developpement mobile sous


19
Android
Accorder les permissions liées aux
actions
• Certaines actions nécessitent une permission pour
la réaliser.
• La permission doit être ajouter au fichier « manifest »
(fichier de configuration)
• Exemple: Appeler un numéro de téléphone
Uri uri = [Link]("[Link]
Intent intent = new Intent(Intent.ACTION_CALL, uri);
startActivity(intent);

Nécessite la permission [Link].CALL_PHONE:


<manifest ...
<uses-permission
android:name="[Link].CALL_PHONE" />
</manifest>

Developpement mobile sous


20
Android
Filtrer la réception des intents
• Android permet aux applications de filtrer les intents reçus d’autres
applications

• Les intents filtre sont définit dans le fichier de configuration (Manifest).

• Exemple:
<activity ...
<intent-filter>
<action
android:name="[Link]" />
<category
android:name="[Link]"/>
<category
android:name="[Link]"/>
<data android:scheme="demo" />
</intent-filter>
</activity>

• L’Intent filtre déclaré ci-dessus acceptera l’intent crée suivant:


Uri uri = [Link]("demo://ceci est une chaine de caractère");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

Developpement mobile sous


21
Android
Filtrer la réception des intents

Chaque élément de la balise est important puisqu’il


détermine le niveau de filtrage :
 action : identifiant unique sous forme de chaîne de
caractères. Il est d’usage d’utiliser la convention de
nom Java
 category : premier niveau de filtrage de l’action.
Cette balise indique dans quelle circonstance
l’action va s’effectuer ou non. Il est possible
d’ajouter plusieurs balises de catégorie
 data : filtre l’objet Intent au niveau des données
elles-mêmes.

Developpement mobile sous


22
Android
Conclusion
• Lancer une activité ou naviguer entre les écrans
passent à travers les objets « Intent ».

• Les objets « intent » permet de solliciter d’autre


applications pour exécuter une action spécifique (
lancer une page web, appeler un correspondant
…)

• Les « intent » est un concept qui offre une flexibilité


et une puissance sans précédant sur les
plateformes mobiles.

Developpement mobile sous


23
Android
Fin chapitre 4

Developpement mobile sous


24
Android

Vous aimerez peut-être aussi