2. LES INTENTS
Les Intents permettent de gérer l'envoi et la réception de messages afin
de faire coopérer les applications.
Le but des Intents est de déléguer une action vers une autre application
ou une autre activité de l'application courante.
Il y a plusieurs façons de créer l'objet de type Intent qui permettra de
lancer une nouvelle activité. Si l'on passe la main à une activité interne à
l'application, on peut créer l'Intent et passer la classe de l'activité ciblée
par l'Intent:
Intent login = new Intent(this, GiveLogin.class);
startActivity(login);
Le premier paramètre 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'hérite pas de
Context.
3. AJOUTER UNE INFORMATION
Les Intent permettent de transporter des informations à destination de
l'activité cible. On appelle ces informations des Extra: les méthodes
permettant de les manipuler sont putExtra et getExtra.
Lorsqu'on prépare un Intent et que l'on souhaite ajouter une information de
type "clef valeur" on procède ainsi:
Intent callactivity2 = new Intent(this, GiveLogin. class);
callactivity2.putExtra("login", "admin");
startActivity(callactivity2);
Dans la classe destination (GiveLogin), on peut récupérer les extras, chacun à partir de sa
clé, ainsi:
Intent intentrecup= getIntent();
String loginTxt= intentrecup.getStringExtra("login");
6. LES INTENTS (2)
S'il s'agit de passer la main à une autre application, on donne au
constructeur de l'Intent les données et l'URI cible: l'OS est chargé de
trouver une application pouvant répondre à l'Intent. Exemple : La
composition d’un numéro
Button btn = (Button)findViewById(R.id.btn_call);
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);
}
});
Lance l’application de
composition d’un
numéro
Ne pas oublier d’ajouter
les autorisations
nécessaires
7. LES SOUS-ACTIVITÉS
Une activité peut démarrer une activité « enfant » ou sous activité. Le
parent attend dans ce cas un résultat en retour.
Etapes:
1. Création de l’intent
2. Lancement de la sous activité
startActivityForResult(intent,ID_REQUEST_CODE);
Activité
parent
Activité
fille
3. Récupération de l'Intent +
extraction
4. Traitement
5.Création du Bundle retour
6. Fin activité et renvoie Bundle
protected void onActivityResult( int requestCode,
int resultCode, Intent data)
7. Gestionnaire pour la réception du mesage en retour
8. LES SOUS-ACTIVITÉS: EXEMPLE
Activité parent Activité enfant
1
2
4
1
3
4
Lancer l’activité
fille pour la
saisie de l’âge 2
• Récupérer
l’intent
• Traitement
• Création du
Bundle
retour
Fin de l’activité
et renvoie du
Bundle
3
9. final int ID_REQUEST_CODE = 0;
btn_saisie_age = (Button)findViewById(R.id.btn_saisie_age);
btn_saisie_age.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(),Saisie_age.class);
startActivityForResult(i, ID_REQUEST_CODE);
}
});
}
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
txt_resultat = (TextView)findViewById(R.id.txtRes);
if(requestCode == ID_REQUEST_CODE)
{
if(resultCode == RESULT_OK)
{
txt_resultat.setText(data.getStringExtra("resultat"));
}
if(resultCode == RESULT_CANCELED)
{
Toast.makeText(getApplicationContext(), "Saisie annulée. Merci de
saisir age de nouveau", Toast.LENGTH_SHORT).show();
}}}
Les sous-activités : Activité « parent »
10. Les sous-activités : Activité « fille »
btn_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(RESULT_CANCELED);
finish();
}
});
btn_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(champ_saisie_age.getText().length() > 0){
Intent returnIntent = new Intent();
returnIntent.putExtra("resultat",champ_saisie_age.getText().toString());
setResult(RESULT_OK, returnIntent);}
else{
Toast.makeText(getApplicationContext(),"Veuillez vérifier votre
saisie",Toast.LENGTH_SHORT).show();}
finish();}
});
11. BROADCASTER UNE INFORMATION
Il est possible d'utiliser un objet Intent pour broadcaster un
message à but informatif. Ainsi, toutes les applications pourront
capturer ce message et récupérer l'information.
Intent broadcast = new Intent("demo.android.broadcast");
broadcast.putExtra("extra", "msgExtra");
sendBroadcast(broadcast);
On peut récupérer les données à l'aide de la méthode getExtras dans l'objet
Bundle qui est dans l'Intent:
Bundle extra = intent.getExtras();
String val = extra.getString("extra");
12. LES CATÉGORIES D’INTENTS
Les catégories d'Intent permettent de grouper les applications par grands
types de fonctionnalités (clients emails, navigateurs, players de musique,
etc...).
Par exemple, on trouve les catégories suivantes qui permettent de lancer:
DEFAULT: catégorie par défaut
BROWSABLE: une activité qui peut être invoquée depuis un clic sur un
navigateur web
APP_MARKET: une activité qui permet de parcourir le market de
télécharger des applications
13. FILTRER LES INTENTS
Une activité sous android peut filtrer les messages véhiculant par des intents
et capter les messages qui les intéressent.
Pour ce faire, on peut définir des filtres d’intent dans le
AndroidManifest.xml de l’application.
On peut utiliser plusieurs niveaux de filtrage:
action: identifie le nom de l'Intent.
category: permet de filtrer une catégorie d'action (DEFAULT, BROWSABLE,
...)
data: filtre sur les données du message.
par exemple en utilisant android:host pour filtrer un nom de domaine
particulier
14. EXEMPLE: EMISSION ET RÉCEPTION D’UN MESSAGE EN BROADCAST
@Override
public void onClick(View v) {
Intent i = new Intent("android.broadcast.demo");
sendBroadcast(i);
}
Activity.java
MyReceiver.java
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Message reçu en Broadcast",
Toast.LENGTH_LONG).show();
}
16. LES MESSAGES NATIFS
Il y’a toujours des messages qui sont diffusés par l’OS. Par exemple:
• ACTION_BOOT_COMPLETED: diffusé lorsque le système a fini son boot
• ACTION_SHUTDOWN: diffusé lorsque le système est en cours d'extinction
• ACTION_SCREEN_ON / OFF: allumage / extinction de l'écran
• ACTION_POWER_CONNECTED / DISCONNECTED: connexion / perte de
l'alimentation
• ACTION_TIME_TICK: une notification envoyée toutes les minutes
…
Tous les messages des Intents, vous pouvez les consulter sur:
http://developer.android.com/reference/android/content/Intent.html
17. LES MESSAGES NATIFS
Autres actions permettent de déléguer autres applications, exemples:
• ACTION_CALL (ANSWER, DIAL): passer/réceptionner/afficher un appel
• ACTION_SEND: envoyer des données par SMS ou E-mail
• ACTION_WEB_SEARCH: rechercher sur internet
Notas do Editor
Uniform Resource Identifier
En déclarant un filtre au niveau du tag activity, l'application déclare les types de messsage qu'elle saitgérer et qui l'invoquent.
En déclarant un filtre au niveau du tag activity, l'application déclare les types de messsage qu'elle saitgérer et qui l'invoquent.