Interroger et interagir avec les applications dans Android 11 avec la visibilité des paquets

Avatar

James

October 15th, 2020

Android 11 a introduit plusieurs mises à jour passionnantes pour les développeurs à intégrer dans leur expérience d’application, y compris de nouveaux contrôles de périphériques et de médias, un support amélioré pour les pliables, et beaucoup plus. En plus des nouvelles fonctionnalités, il y a également plusieurs améliorations de la vie privée que les développeurs doivent intégrer dans leur application lors de la mise à niveau et du reciblage vers Android 11. L’une de ces améliorations est l’introduction de la visibilité des paquets qui modifie la capacité à interroger les applications installées et les paquets sur l’appareil d’un utilisateur.

Icônes d'application pour les apps de messagerie et code pour interroger les intentions sur l'appareil

Lorsque vous voulez ouvrir un navigateur ou envoyer un e-mail alors votre application devra lancer et interagir avec une autre application sur l’appareil à travers un Intent. Avant d’appeler StartActivity, il est préférable de QueryIntentActivities ou ResolveActivity pour s’assurer qu’il existe une application capable de traiter la demande. Si vous utilisez Xamarin.Essentials, alors vous n’avez peut-être pas vu ces API car la bibliothèque gère toute la logique pour vous automatiquement pour le navigateur(externe), l’email et le SMS.

Avant Android 11, chaque application pouvait facilement interroger toutes les applications installées et voir si une Intent spécifique s’ouvrirait lorsque StartActivity est appelée. Tout cela a changé avec Android 11 avec l’introduction de la visibilité des paquets. Vous devrez maintenant déclarer quels intents et schémas de données vous voulez que votre application puisse interroger lorsque votre application cible Android 11.

Paramètres du projet Android ciblant Android 11

Une fois que vous reciblerez vers Android 11 et que vous exécuterez votre application sur un appareil exécutant Android 11, vous recevrez zéro résultat si vous utilisez QueryIntentActivities. Si vous utilisez Xamarin.Essentials, vous recevrez un FeatureNotSupportedException lorsque vous essayez d’appeler l’une des API qui doit interroger les activités. Disons que vous utilisez la fonctionnalité de courrier électronique de Xamarin.Essentials. Votre code peut ressembler à ceci:

public async Task SendEmail(string subject, string body, List<string> recipients){ try { var message = new EmailMessage { Subject = subject, Body = body, To = recipients }; await Email.ComposeAsync(message); } catch (FeatureNotSupportedException fbsEx) { // Email is not supported on this device } catch (Exception ex) { // Some other exception occurred }}

Si votre application ciblait Android 10 et plus tôt, cela fonctionnerait tout simplement. Avec la visibilité des paquets dans Android 11, lorsque vous essayez d’envoyer un Email, Xamarin.Essentials va essayer d’interroger les pacakges qui supportent l’email et zéro résultat sera retourné. Cela se traduira par un FeatureNotSupportedException à lancer, ce qui n’est pas idéal. Pour permettre à votre application d’obtenir une visibilité dans les paquets, vous devrez ajouter une liste de queries dans votre AndroidManifest.xml.

<manifest package="com.mycompany.myapp"> <queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries></manifest>

Si vous avez besoin d’interroger plusieurs intents ou d’utiliser plusieurs API, vous devrez les ajouter tous dans la liste.

<queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="http"/> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="https"/> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data android:scheme="smsto"/> </intent></queries>

Et voilà, avec juste une petite quantité de configuration, vous êtes app continuera à fonctionner sans faille lorsque vous ciblez Android 11.

En savoir plus

Veuillez parcourir la documentation officielle d’Android 11 sur la visibilité des paquets, et bien sûr la documentation Xamarin.Essentials nouvellement mise à jour. Enfin, assurez-vous de lire les notes de publication de Xamarin.Android 11.

Avatar
James Montemagno

Principal Lead Program Manager, .NET Community

Follow

.

Laisser un commentaire