James
15 oktober 2020
Android 11 introduceerde verschillende opwindende updates voor ontwikkelaars om te integreren in hun app-ervaring, waaronder nieuwe apparaat- en mediabesturingselementen, verbeterde ondersteuning voor opvouwbare bestanden, en nog veel meer. Naast nieuwe functies zijn er ook een aantal privacyverbeteringen die ontwikkelaars in hun applicatie moeten integreren wanneer ze een upgrade naar Android 11 uitvoeren of deze opnieuw instellen. Een van deze verbeteringen is de introductie van pakketzichtbaarheid, waarmee de mogelijkheid om geïnstalleerde toepassingen en pakketten op het apparaat van een gebruiker te bevragen, wordt gewijzigd.
Wanneer u een browser wilt openen of een e-mail wilt verzenden, moet uw toepassing via een Intent
starten en communiceren met een andere toepassing op het apparaat. Voordat u StartActivity
aanroept, is het verstandig om QueryIntentActivities
of ResolveActivity
te gebruiken om er zeker van te zijn dat er een applicatie is die het verzoek kan verwerken. Als u Xamarin.Essentials gebruikt, dan heeft u deze APIs misschien nog niet gezien omdat de bibliotheek alle logica voor u automatisch afhandelt voor Browser(Extern), E-mail, en SMS.
Vóór Android 11 kon elke app eenvoudig alle geïnstalleerde applicaties bevragen en zien of een specifieke Intent
zou openen wanneer StartActivity
wordt aangeroepen. Dat is allemaal veranderd met Android 11 met de introductie van pakketzichtbaarheid. U moet nu aangeven welke intenties en gegevensschema’s u met uw app wilt kunnen opvragen wanneer uw app is gericht op Android 11.
Als u eenmaal retarget naar Android 11 en uw applicatie uitvoert op een apparaat waarop Android 11 draait, krijgt u nul resultaten als u QueryIntentActivities
gebruikt. Als u Xamarin.Essentials gebruikt, krijgt u een FeatureNotSupportedException
wanneer u een van de API’s probeert op te roepen die activiteiten moeten bevragen. Laten we zeggen dat u de Email functie van Xamarin.Essentials gebruikt. Uw code kan er dan als volgt uitzien:
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 }}
Als uw app op Android 10 en eerder was gericht, zou het gewoon werken. Met package zichtbaarheid in Android 11 wanneer je een email probeert te versturen, zal Xamarin.Essentials proberen te zoeken naar pacakges die email ondersteunen en er zullen nul resultaten worden geretourneerd. Dit zal resulteren in een FeatureNotSupportedException
die wordt gegooid, wat niet ideaal is. Om ervoor te zorgen dat uw toepassing zicht krijgt op de pakketten, moet u een lijst met queries
toevoegen aan uw AndroidManifest.xml
.
<manifest package="com.mycompany.myapp"> <queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries></manifest>
Als u meerdere intenties moet query’en of meerdere API’s moet gebruiken, moet u ze allemaal aan de lijst toevoegen.
<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>
En daar hebt u het, met slechts een kleine hoeveelheid configuratie zal uw app vlekkeloos blijven werken wanneer u Android 11 target.
Learn More
Bekijk zeker de officiële Android 11 documentatie over package visibility, en natuurlijk de recent bijgewerkte Xamarin.Essentials documentatie. Lees tenslotte ook de Xamarin.Android 11 release notes.
James Montemagno
Principal Lead Program Manager, .NET Community
Volg