Vraag naar en wisselwerking met apps in Android 11 met pakketzichtbaarheid

Avatar

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.

App-pictogrammen voor e-mailapps en code om intenties op het apparaat te bevragen

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.

Android-projectinstellingen 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.

Avatar
James Montemagno

Principal Lead Program Manager, .NET Community

Volg

Plaats een reactie