3 votes

Touchez une étiquette NFC qui contient une URL. (Comment) puis-je remplacer l'action par défaut (lancement du navigateur) ?

Mon question précédente a établi que lorsqu'un appareil Android réinitialisé en usine touche une étiquette NFC contenant une URL, le système d'exploitation lance un navigateur.

Je peux l'empêcher ?

S'agit-il simplement d'une action par défaut de la part de l'OS, puisqu'aucun autre gestionnaire n'était disponible ?

Si je code un BroadcatReceiver pour gérer le robinet, cela empêchera-t-il automatiquement le serveur de lancer le navigateur ? Si non, puis-je ajouter du code pour supprimer le lancement du navigateur ?

2voto

Nirgn Points 461

Le navigateur s'ouvre car aucune autre application ne peut gérer cette action. Si vous avez deux navigateurs, le système d'exploitation vous demandera quelle application vous voulez utiliser pour cette action et lorsque vous en choisirez une, le système d'exploitation se souviendra de votre préférence.

Vous pouvez toujours aller dans les paramètres (l'application) et "effacer la valeur par défaut". Donc, pour répondre à votre question, vous pouvez écrire une application qui va gérer cette action (en écrivant ce récepteur de diffusion dans le AndroidManifest.xml) et ne rien faire avec l'URL. Puis, en tapant sur le tag NFC, choisissez votre application et cliquez sur toujours (pour qu'elle ne demande plus rien). De cette façon, vous pouvez forcer le système d'exploitation à ne rien faire lorsque vous tapez sur un tag NFC avec une URL.

1voto

rizzle Points 3127

Du point de vue de l'utilisateur, on ne peut pas vraiment empêcher qu'une URL récupérée à partir d'une étiquette NFC soit lancée dans un navigateur. À la découverte d'une telle URL, Android notifie simplement l'application qui a précédemment enregistré son intérêt pour ce type de données provenant d'un tag NFC (ou affiche un sélecteur d'activité si plusieurs applications ont enregistré un intérêt pour ce type de données).

C'est donc l'application du navigateur web qui a enregistré son intérêt (par le biais d'un filtre d'intention dans son AndroidManifest.xml) et vous ne pouvez normalement pas 1 désactivez ça.

Du point de vue du programmeur, cependant, vous pouvez empêcher qu'une URL particulière soit traitée par un navigateur Web. Les navigateurs Web s'enregistrent généralement pour être lancés sur toutes les URL "http://" et "https://". Vous pouvez contourner cette règle en enregistrant votre application pour une URL plus spécifique (c'est-à-dire une URL qui comprend un nom d'hôte ou même un chemin, par ex. http://www.example.com/ ). Dans ce cas, votre application aura automatiquement la priorité sur le navigateur web (aucun sélecteur d'activité ne sera affiché).

En ce qui concerne votre idée avec le BroadcastReceiver : Ceci n'est actuellement pas possible. Les événements de découverte NFC, comme la découverte d'une URL, sont uniquement envoyés aux activités. Un récepteur de diffusion ne peut pas capter ces intentions. (Voir cette question sur Stackoverflow pour une solution de contournement possible).


1 ) Notez que ce n'est pas tout à fait vrai, car il existe des moyens de désactiver les filtres d'intention de manière programmatique dans certaines conditions.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X