Android: Les intents

17
ANDROID: LES INTENTS MOHAMED BOURAOUI [email protected]

Transcript of Android: Les intents

Page 1: Android: Les intents

ANDROID: LES INTENTS

MOHAMED BOURAOUI

[email protected]

Page 2: 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.

Page 3: Android: Les intents

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");

Page 4: Android: Les intents

EXEMPLE

Activité pour l’authentification Activité pour l’accueil

Page 5: Android: Les intents

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);}

??

??

Page 6: Android: Les intents

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

Page 7: Android: Les intents

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

Page 8: Android: Les intents

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

Page 9: Android: Les intents

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 »

Page 10: Android: Les intents

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();} });

Page 11: Android: Les intents

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");

Page 12: Android: Les intents

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

Page 13: Android: Les intents

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

Page 14: Android: Les intents

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(); }

Page 15: Android: Les intents

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>

Page 16: Android: Les intents

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

Page 17: Android: Les intents

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