Vous êtes sur la page 1sur 17

ANDROID: LES INTENTS

MOHAMED BOURAOUI
BOURAWI.MOHAMED@GMAIL.COM

LES 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 vers une autre

application ou une autre activit de l'application courante.


Il y a plusieurs faons de crer 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 crer l'Intent et
passer la classe de l'activit cible par l'Intent:
Intentlogin=newIntent(this,GiveLogin.class);
startActivity(login);
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.

AJOUTER UNE INFORMATION


Les Intent permettent de transporter des informations destination

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


mthodes permettant de les manipuler sont putExtra et
getExtra.
Lorsqu'on prpare un Intent et que l'on souhaite ajouter une

information de type "clef valeur" on procde ainsi:


Intent callactivity2 = new Intent(this, GiveLogin. class);
callactivity2.putExtra("login", "admin");
startActivity(callactivity2);

Dans la classe destination (GiveLogin), on peut rcuprer les extras, chacun


partir de sa cl, ainsi:
Intent intentrecup= getIntent();
String loginTxt= intentrecup.getStringExtra("login");

EXEMPLE
Activit pour lauthentification

Activit pour laccueil

EXEMPLE : COMPLTEZ PAR LE CODE NCESSAIRE


Authentification.java
@Override
public void onClick(View v) {
Intent intent = new Intent(this, Acceuil.class);
String monTexte = champ_nom.getText().toString();
intent.putExtra(extraMsg,monTexte);
startActivity(intent);
}

ACCEUIL.JAVA
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_acceuil);
textV = (TextView)findViewById(R.id.msgText);
Intent intent = getIntent();
String message = intent.getStringExtra(Authentification.extraMsg);
textV.setText("Bonjour "+message);
}

LES INTENTS (2)


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 : La composition dun numro
Buttonbtn=(Button)findViewById(R.id.btn_call);
b.setOnClickListener(newOnClickListener(){
publicvoidonClick(Viewv){
Uritelnumber=Uri.parse("tel:0248484000");
Intentcall=newIntent(Intent.ACTION_DIAL,telnumber);
startActivity(call);
}
});

Ne pas oublier
dajouter les
autorisations
ncessaires

Lance lapplication de
composition dun
numro

LES SOUS-ACTIVITS
Une activit peut dmarrer une activit enfant ou sous

activit. Le parent attend dans ce cas un rsultat en retour.


Etapes:

Activit
parent de lintent
1. Cration
2. Lancement de la sous activit
startActivityForResult(intent,ID_REQUEST_CO
DE);

7. Gestionnaire pour la rception du mesage en


retour
protected void onActivityResult(
int requestCode,
int resultCode, Intent data)

Activit
fille

3. Rcupration de l'Intent +
extraction
4. Traitement
5.Cration du Bundle retour
6. Fin activit et renvoie Bundle

LES SOUS-ACTIVITS: EXEMPLE


Activit parent
Lancer
lactivit fille
pour la saisie
de lge

3
4

Activit enfant
2

Rcuprer
lintent
Traitement
Cration du
Bundle
retour

3
Fin de
lactivit et
renvoie du
Bundle

Les sous-activits : Activit parent


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 annule. Merci de
saisir age de nouveau", Toast.LENGTH_SHORT).show();
}}}

Les sous-activits : Activit fille


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 vrifier votre
saisie",Toast.LENGTH_SHORT).show();}
finish();}
});

btn_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setResult(RESULT_CANCELED);
finish();
}
});

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 rcuprer l'information.
Intent broadcast = new Intent("demo.android.broadcast");
broadcast.putExtra("extra", "msgExtra");
sendBroadcast(broadcast);
On peut rcuprer les donnes l'aide de la mthode getExtras
dans l'objet Bundle qui est dans l'Intent:
Bundle extra = intent.getExtras();
String val = extra.getString("extra");

LES CATGORIES DINTENTS

Les catgories d'Intent permettent de grouper les applications

par grands types de fonctionnalits (clients emails, navigateurs,


players de musique, etc...).
Par exemple, on trouve les catgories suivantes qui permettent

de lancer:
DEFAULT: catgorie par dfaut

BROWSABLE: une activit qui peut tre invoque depuis un


clic sur un navigateur web

APP_MARKET: une activit qui permet de parcourir le market

de tlcharger des applications

FILTRER LES INTENTS

Une activit sous android peut filtrer les messages vhiculant par

des intents et capter les messages qui les intressent.


Pour ce faire, on peut dfinir des filtres dintent dans le

AndroidManifest.xml de lapplication.
On peut utiliser plusieurs niveaux de filtrage:
action: identifie le nom de l'Intent.
category: permet de filtrer une catgorie d'action (DEFAULT,

BROWSABLE, ...)
data: filtre sur les donnes du message.
par exemple en utilisant android:host pour filtrer un nom de

domaine particulier

EXEMPLE: EMISSION ET RCEPTION DUN MESSAGE EN


BROADCAST
Activity.java
@Override
public void onClick(View v) {
Intent i = new Intent("android.broadcast.demo");
sendBroadcast(i);
}

MyReceiver.java
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Message reu en Broadcast",
Toast.LENGTH_LONG).show();
}

EXEMPLE: EMISSION ET RCEPTION DUN MESSAGE EN


BROADCAST
<application
AndroidManifest.xml
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name=".Acceuil"
android:label="@string/title_activity_acceuil">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter></activity>
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.broadcast.demo" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>

LES MESSAGES NATIFS


Il ya toujours des messages qui sont diffuss par lOS. Par

exemple:
ACTION_BOOT_COMPLETED: diffus lorsque le systme a fini son
boot
ACTION_SHUTDOWN: diffus lorsque le systme 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 envoye toutes les minutes

Tous les messages des Intents, vous pouvez les consulter sur:
http://developer.android.com/reference/android/content/Intent.html

LES MESSAGES NATIFS


Autres actions permettent de dlguer autres applications,

exemples:
ACTION_CALL (ANSWER, DIAL): passer/rceptionner/afficher un
appel
ACTION_SEND: envoyer des donnes par SMS ou E-mail
ACTION_WEB_SEARCH: rechercher sur internet