1
votes

Lancer une intention implicite en même temps qu'une tentative explicite et terminer l'activité

Dans mon application, l'une des options disponibles pour les utilisateurs authentifiés est de supprimer leur compte. Lorsqu'ils sélectionnent cette option, je veux faire trois choses:

  1. Lancer une intention implicite d'accéder à un site Web, par exemple pour répondre à une enquête ou quelque chose
  2. Lancez une intention explicite pour accéder à l'activité d'intro / splash de l'application
  3. Terminer l'activité en cours

Voici le gestionnaire de clics pour le bouton "supprimer le compte":

val intent2 = Intent(this, IntroActivity::class.java)
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent2)
finish()

val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
startActivity(intent1)

Ce qui se passe réellement, c'est que l'activité d'intro / splash démarre et que l'activité actuelle se termine , mais le navigateur ne se lance pas. Je ne sais pas si les indicateurs sont vraiment nécessaires pour l'intention explicite.

Si j'inverse l'ordre des événements dans le gestionnaire de clics, cela semble fonctionner sur un téléphone matériel mais pas dans l'émulateur pour certains raison:

val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
startActivity(intent1)

val intent2 = Intent(this, IntroActivity::class.java)
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(intent2)
finish()

Ma question est double: pourquoi se comporte-t-il de cette façon et quelle est la bonne façon de le faire?


1 commentaires

«pourquoi se comporte-t-il de cette façon» - effacer une tâche efface la tâche. L'activité ACTION_VIEW ferait partie de votre tâche et vous la supprimeriez donc. "quelle est la bonne façon de le faire?" - ne déléguez pas "une enquête ou quelque chose" à une autre application. Gérez-le dans l'application.


3 Réponses :


2
votes

Vous ne pouvez pas lancer deux intentions simultanément. L'un d'eux a la préférence, et l'autre est abandonné (je ne sais pas si ce qui est ignoré est cohérent entre les versions, donc je ne commenterai pas ici). Vous devez lancer la requête / enquête, puis lancer l'intention suivante en réponse. Ou lancez votre écran d'accueil avec un supplément qui lui dit de lancer le navigateur (donc vous vous déconnectez, rentrez chez vous, puis le navigateur se lance). Vous ne pouvez pas le faire comme 2 appels startActivity directs.


0 commentaires

1
votes

Utilisez le méthode startActivities qui prend dans un tableau de Intents et un ensemble facultatif d'extras.


0 commentaires

0
votes

Utilisez startActivities au lieu de startActivity:

val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
val intent2 = Intent(this, IntroActivity::class.java)
intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
val intents = arrayOf<Intent>(intent2, intent1)
startActivities(intents)
finish()

Mettez l'intention en dernier dans le tableau qui doit s'afficher en haut.


0 commentaires