Académique Documents
Professionnel Documents
Culture Documents
StartActivity()
intent
Activity A Activity B
Créer un intent (simple)
Créer une nouvelle activité :
SecondActivity,
Un layout se crée automatiquement
pour cette activité : activity_second
On met un bouton dans le layout de
MainActivity dont le rôle sera de passer
à l’autre activité.
Dans le layout activity_second on met
un TextView pour marquer qu’on est
dans la seconde activité.
Créer un intent (simple)
"information1"
Envoie d’informations avec intent
Pratiquer : ajouter un EditText sur lequel on ajoute du texte ; ce texte sera récupéré
et affiché dans la seconde activité.
Intent implicite
Dans les exemples précédents, c’était nous qui défini l’activité de destination.
L’intent est dit alors dans ce cas : « intent explicite ».
Néanmoins , pour certains cas, on peut donner la main au système pour que lui
définisse l’activité adéquate. Dans ce cas, on parle d’un « intent implicite »
Alors, dans un intent implicite on va dire au système le type d’action à
effectuer sur les données envoyées, et c’est à lui de définir qu’elle(s) activité(s)
va s’en occuper.
Lors de la construction de l’intent, on n’a pas besoin de spécifier l’activité de
destination : Intent myIntent= new Intent();
La définition du type de l’action se fait au niveau de la classe intent via la
méthode setAction()
myIntent.setAction(Intent.ACTION_DIAL);
//DIAL: composeur numéro téléphoniques
Intent implicite
➢ NB : Chaque activité développée dans les applications
installées définie les actions qu’elle peut effectuer dans
le fichier manifeste correspondant, dans
<intent-filter>
Pour envoyer les données, on utilise la méthode
setData() qui demande un Uri (Uniform Ressource
Identifier) pour identifier la ressource à envoyer.
Et pour que le numéro envoyé soit traité en tant que
téléphonique on doit le transformer au format Uri
correspondant. On créer alors notre Uri ainsi :
Uri myUri= Uri.parse("tel:"+et.getText().toString());
myIntent.setData(myUri);
startActivity(myIntent);
Intent avec retour
StartActivity() permet d’activer l’intent sans prévoir un retour
StartActivityForResult() permet de prévoir une réponse en retour (ex. Marquer un
message comme lu)
intent
StartActivity()
StartActivityForResult()
Activity A Activity B
intent
setResult()
OnActivityResult()
Intent avec retour : Exemple pratique
startActivityForResult() n’est plus supportée car il présentait certains problèmes en
cas de non appel de la fonction call back de récupération onActivityResult().
ActivityResultLaucher est une classe qui gère les méthodes appelées au retour à
l’activité.
Pour l’utiliser on en crée une instance en précisant le type générique comme intent :
ActivityResultLauncher<Intent> myARL
On appel registerForActivityResult() avec deux paramètres (objets) : le premier un
un objet contract précisant qu’il s’agit de StartActivityForResult, et l’autre la call back
à appliquer au retour :
ActivityResultLauncher<Intent> myARL= registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
Toast.makeText(MainActivity.this,"Activity back",
Toast.LENGTH_LONG).show(); } });
Intent avec retour : Exemple pratique
Au mainActivity dans setOnClickListener du bouton, on lance le launcher par la
méthode launch() avec comme paramètre l’intent (car on l’a donné comme type
générique) :
myARL.launch(new Intent(getBaseContext(),SecondActivity.class));