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