Comment puis-je faire ce que le navigateur Web appelle un schéma personnalisé pour démarrer une activité, puis je veux que j'appuie sur le bouton arrière mais que je ne renvoie pas le navigateur Web.
Je veux juste mettre en œuvre un transfert lorsque j'appelle un navigateur Web. Appelez ensuite mon programme pour commencer une autre activité. Quand je revenais, je ne voudrais pas voir le navigateur Web. P>
Comment dois-je faire ça? P>
Intent i = new Intent(Intent.ACTION_VIEW); i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); i.setData(Uri.parse(url)); startActivity(i);
5 Réponses :
Lorsque vous ouvrez votre intention, vous pouvez peut-être la définir avec un drapeau sans historique
Pouvez-vous me dire quelle est la séquence exactement?
Cela se produit probablement car la deuxième activité est lancée dans la même tâche que vous avez démarré le navigateur, ce qui signifie que le démarrage de votre deuxième activité revient à la tâche déjà existante avec l'activité la plus haute (activité 1) poussée à la pile arrière. Voir ici . P>
Si vous faites démarrer votre deuxième activité sur une tâche différente, appuyez sur "Retour". Devrait terminer cette tâche et revenir à la tâche derrière, le navigateur. P>
Pour accomplir cela, vous pouvez utiliser flag_activit_new_task code> dans l'intention de démarrage d'activité 2 ou définissez le android de l'activité: LaunchMode code> attribut sur singletop code> votre manifeste. p>
J'ai trouvé que seule l'intention.flag_activity_no_history ne fonctionne que si le navigateur n'était pas exécuté auparavant. Si je redémarre Android et exécutez mon application, quel navigateur d'appel fonctionne bien. Mais quand je commence à navigateur avant mon application, le navigateur restera dans l'histoire. P>
J'ai essayé d'ajouter au Manifeste à la définition d'activité Android: LaunleMode = "SingleTop" en fonction de l'utilisateur634618. Mais ça ne marche pas. Je ne comprends pas pourquoi SingleTop devrait aider. P>
in Documentation est aussi ceci: p>
BlockQuoteas Un autre exemple, l'application de navigateur Android déclare que l'activité du navigateur Web doit toujours s'ouvrir dans sa propre tâche - en spécifiant le mode de lancement SingleSksk dans l'élément. Cela signifie que si votre application émet une intention d'ouvrir le navigateur Android, son activité n'est pas placée dans la même tâche que votre application. Au lieu de cela, une nouvelle tâche commence pour le navigateur ou, si le navigateur a déjà une tâche en cours d'exécution, cette tâche est présentée pour gérer la nouvelle intention. P> blockQuote>
Je pense que cela causer le problème. Mais comment forcer le navigateur exécuté dans la tâche actuelle? P>
Comme expliqué par d'autres utilisateurs, votre activité est en cours de création sur la pile du navigateur. Vous ne pouvez pas empêcher le navigateur d'ouvrir sur sa propre pile, mais vous pouvez effectuer la même configuration sur votre application.
Dans votre activité appelée par le navigateur, ajoutez ce qui suit dans votre fichier manifeste: P>
android:allowTaskReparenting="true" android:launchMode="singleTask"
Je viens de modifier ma réponse. Android: LaunleMode = "singletsk" est obligatoire pour qu'il crée l'activité dans la tâche de votre application. Le navigateur restera dans l'historique quel que soit le drapeau, mais il sera effectivement déplacé vers le bas de la pile.
Merci ANGRAX, vos conseils ont travaillé pour moi. Maintenant, mon application peut revenir à l'activité principale, quel que soit le contenu que les annonces peuvent s'ouvrir. Mon cas: Stackoverflow.com/Questtions/53424234/...
Je rencontre aussi ce problème. Voici le résumé: P>
inent.setflags (intention.flag_activity_no_history) code> ne fonctionne pas; LI>
-
android: allemetascheparenting = "vrai" Android: LaunleMode = "SingleTask" code> a l'air de placer le navigateur au bas de la pile d'activités, mais après avoir quitté l'application (à l'arrière), éventuellement Le navigateur est à nouveau lancé. Li>
ol>
Donc, fondamentalement, cette question existe toujours.
Je posterai si je trouve un moyen de le résoudre. P>
Impossible de trouver des solutions ... La dernière option est donc de remplacer le gestionnaire de clés de retour pour lancer l'écran d'accueil après avoir appuyé sur la touche BACK, tant que l'activité est destinée à accéder à l'écran d'accueil à l'écran. Laid, mais travaille.