Intent filter
Android permet de gérer les deux cas et tout se fait dans la déclaration de votre activité au niveau du fichier AndroidManifest.xml de votre projet en ajoutant un Intent Filter. Dans les exemples précédemment nous avons vu qu’il fallait au moins en définir un sur votre activité principale pour définir votre lanceur (pour rappel une intent est la description d'une opération à réaliser)
<activity android:name=".SplashActivity" android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Autre exemple
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="image/*"/>
</intent-filter>
</activity>
Plusieurs balises peuvent être ajoutées
Par exemple pour appeler une application qui gère l’envoi de mail nous écrirons
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Feuille de match ");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,buffer.toString());
startActivity(Intent.createChooser(emailIntent, "Envoi email..."));
Dans le code donné en exemple vous remarquerez que nous avons utilisé la méthode Intent.createChooser qui affiche une liste demandant de choisir l’activité à choisir si plusieurs répondent à votre demande (dans le cas contraire le système prendra celle déclarée par défaut)
Il existe deux méthodes pour appeler une Activity suivant si on attend une réponse ou non (startActivity() ou startActivityForResult()).
Recevoir une demande
Ce cas est beaucoup plus courant et j’en ai déjà parlé dans un article précédent mais voici un exemple d’une activité qui reçoit une demande contenant une donnée en paramètre
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
<data android:mimeType="image/*"/>
</intent-filter>
</activity>
Plusieurs balises peuvent être ajoutées
- Action permet de nommer une intent. On peut trouver des actions standards comme ACTION_VIEW, ACTION_WEB_SEARCH… ou des actions de broadcast comme ACTION_BOOT_COMPLETED, ACTION_PACKAGE_CHANGED
- category permet d’enrichir l’information précédente par exemple CATEGORY_APP_CONTACTS, CATEGORY_APP_EMAIL, CATEGORY_DEFAULT…
- data va également permettre d’ajouter des informations supplémentaires comme dans notre exemple ci dessus, le type mime. Si nous avions défini une action ACTION_PACKAGE_CHANGED
Par exemple pour appeler une application qui gère l’envoi de mail nous écrirons
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Feuille de match ");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,buffer.toString());
startActivity(Intent.createChooser(emailIntent, "Envoi email..."));
Dans le code donné en exemple vous remarquerez que nous avons utilisé la méthode Intent.createChooser qui affiche une liste demandant de choisir l’activité à choisir si plusieurs répondent à votre demande (dans le cas contraire le système prendra celle déclarée par défaut)
Il existe deux méthodes pour appeler une Activity suivant si on attend une réponse ou non (startActivity() ou startActivityForResult()).
Recevoir une demande
Ce cas est beaucoup plus courant et j’en ai déjà parlé dans un article précédent mais voici un exemple d’une activité qui reçoit une demande contenant une donnée en paramètre
if (getIntent().getExtras() != null) {
matchEvent = getIntent().getExtras().getParcelable(PARAM_EVENT_TO_UPDATE);
}
Pour renvoyer une réponse on utilisera la méthode setResult de l’Intent
Intent intent = this.getIntent();
matchEvent = getIntent().getExtras().getParcelable(PARAM_EVENT_TO_UPDATE);
}
Pour renvoyer une réponse on utilisera la méthode setResult de l’Intent
Intent intent = this.getIntent();
intent.putExtra(PARAM_EVENT_SAVED, matchEvent);
this.setResult(RESULT_OK, intent);
finish();
Ajouter un ou plusieurs flags lors de l’appel d’une Intent
Vous pouvez ajouter (addFlags) ou spécifier des flags (setFlags) pour contrôler comment votre activité doit se comporter. Par exemple
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|(Intent.FLAG_ACTIVITY_NEW_TASK)
this.setResult(RESULT_OK, intent);
finish();
Ajouter un ou plusieurs flags lors de l’appel d’une Intent
Vous pouvez ajouter (addFlags) ou spécifier des flags (setFlags) pour contrôler comment votre activité doit se comporter. Par exemple
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|(Intent.FLAG_ACTIVITY_NEW_TASK)
- FLAG_ACTIVITY_CLEAR_TOP permet d’indiquer au système que si d’autres instances de l’Activity sont déjà lancées alors elles seront toutes fermées et seule l’instance appelée sera conservée.
- FLAG_ACTIVITY_NEW_TASK permet de spécifier que la tâche appelée devient la nouvelle tâche sur la pile d’historique des Activity.
Aucun commentaire:
Enregistrer un commentaire
Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.