Quelle alternative à la méthode onActivityResult (qui est dépréciée) ?

Les activités sont une notion importante dans le développement d'applications pour le système d'exploitation d'Android. Une activité correspond à une action spécifique lancée sur une application et renvoie un résultat. C'est grâce à cette notion d'activité que les applications peuvent interagir entre elles. Par exemple, une application affichant les actualités peut appeler une activité pour afficher une carte, ce qui va lancer l'application de cartographie de votre téléphone. C'est la méthode "onActivityResult" qui auparavant était appelée pour gérer le résultat d'une activité, mais l'appeler directement ne fonctionne plus, elle est maintenant dépréciée.

De nouvelles classes ont été créées afin de donner plus de fonctionnalités aux activités. Ces nouvelles classes doivent être utilisées pour remplacer l'appel de la méthode "onActivityResult". On doit d'abord appeler la méthode "registerForActivityResult" qui va enregistrer le résultat en paramètres. Cette méthode prend 2 paramètres. Le premier est un objet de la classe "ActivityResultContracts". Cet objet définit le type de données dont a besoin l'activité pour produire le résultat et celui attendu dans le résultat de l'activité. Vous pouvez utiliser un objet vide si vous ne souhaitez pas définir ces types. Le deuxième paramètre est un objet de la classe "ActivityResultCallback". C'est cet objet qui va contenir la méthode "onActivityResult", qui sera appelée une fois l'activité terminée.

//Cette méthode ne change pas avec la nouvelle gestion des activités
public void openSomeActivityForResult() {
    Intent intent = new Intent(this, SomeActivity.class);
    someActivityResultLauncher.launch(intent);
}

// L'assignement peut avoir lieu dans la méthode "onAttach" ou "onCreate", avant que l'activité ne soit affichée
ActivityResultLauncher<Intent> someActivityResultLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    Intent data = result.getData();
                    traitementDuResultat();
                }
            }
        });

Si vous travaillez avec le langage Kotlin pour le développement de vos applications, voici le code à utiliser pour gérer les activités.

fun openSomeActivityForResult() {
    val intent = Intent(this, SomeActivity::class.java)
    resultLauncher.launch(intent)
}

var resultLauncher = registerForActivityResult(StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        // There are no request codes
        val data: Intent? = result.data
        traitementDuResultat()
    }
}

Android