Android: Les intents
-
Upload
mohamed-bouraoui -
Category
Technology
-
view
283 -
download
0
Transcript of Android: Les intents
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.
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");
EXEMPLE
Activité pour l’authentification Activité pour l’accueil
EXEMPLE : COMPLÉTEZ PAR LE CODE NÉCESSAIREAuthentification.java
Acceuil.java
@Overridepublic void onClick(View v) {Intent intent = new Intent(this, Acceuil.class);String monTexte = champ_nom.getText().toString();intent.putExtra(extraMsg,monTexte);startActivity(intent);}
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 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
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 + extraction4. Traitement5.Création du Bundle retour6. Fin activité et renvoie Bundle
protected void onActivityResult( int requestCode, int resultCode, Intent data)
7. Gestionnaire pour la réception du mesage en retour
LES SOUS-ACTIVITÉS: EXEMPLE
Activité parent Activité enfant1
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
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 »
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();} });
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");
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
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
EXEMPLE: EMISSION ET RÉCEPTION D’UN MESSAGE EN BROADCAST
@Overridepublic void onClick(View v) {
Intent i = new Intent("android.broadcast.demo"); sendBroadcast(i);}
Activity.java
MyReceiver.javapublic class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Message reçu en Broadcast", Toast.LENGTH_LONG).show(); }
EXEMPLE: EMISSION ET RÉCEPTION D’UN MESSAGE EN BROADCAST
AndroidManifest.xml<application 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 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
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