Certains développeurs d'applications préfèrent garder l'utilisateur dans l'application autant que possible, même lorsqu'il visite des liens externes. WebView intègre de manière transparente du contenu web externe dans une tâche d'application de sorte qu'il semble en faire partie. Cependant, des contenus volumineux tels que des pages web complètes qui ne peuvent pas s'insérer dans la mise en page de l'application nécessitent un navigateur minimal pour les afficher. Certaines applications ont leurs propres navigateurs intégrés. Une nouveauté relativement récente est la capacité des navigateurs autonomes (y compris Chrome et Firefox) à afficher des onglets personnalisés à l'intérieur d'autres applications de la même manière qu'un navigateur intégré.
Lorsque vous touchez un lien, l'application peut déclencher un intent.action.VIEW
explicite vers le navigateur web ou un intent implicite avec l'URL en tant que données. Dans ce dernier cas, s'il y a plusieurs applications capables de gérer le schéma donné dans l'URL (par exemple https://
) et qu'une application par défaut n'est pas déjà sélectionnée, le résolveur d'activité du système (com.android.internal.app.ResolverActivity
) affiche une boîte de dialogue Ouvrir avec (avec l'aide du gestionnaire de package qui affiche la dernière application sélectionnée en haut (voir plus de détails dans cette réponse):
Ensuite, un intent explicite est transmis à l'application sélectionnée par l'utilisateur. Ainsi, si vous sélectionnez un navigateur (ou une autre application) qui ne prend pas en charge les onglets personnalisés, un navigateur complet est lancé. Mais si l'intent est un CustomTabsIntent
(avec des EXTRAs) et que l'application sélectionnée (par exemple, le navigateur) prend en charge les onglets personnalisés, l'URL s'ouvre dans l'application appelante. Le navigateur peut démarrer un CustomTabsService
en arrière-plan pour recevoir des intents avec ACTION_CUSTOM_TABS_CONNECTION
:
~$ dumpsys package | grep CustomTabsService
android.support.customtabs.action.CustomTabsService:
b5a09c8 org.mozilla.firefox/org.mozilla.gecko.customtabs.GeckoCustomTabsService
Firefox, au moins, propose une option dans les paramètres pour désactiver les onglets personnalisés:
De même, certaines applications peuvent proposer une option de configuration pour ouvrir les liens de manière externe, désactivant le navigateur intégré et/ou les onglets personnalisés. Ou vous pouvez personnaliser le comportement des onglets personnalisés en utilisant des applications tierces comme Lynket - un projet open source (je n'ai aucun lien). Théoriquement, la même approche peut être utilisée pour désactiver les onglets personnalisés en sélectionnant une telle application lorsque la boîte de dialogue "Ouvrir avec" est affichée.