Abfrage und Interaktion mit Apps in Android 11 mit Paket-Sichtbarkeit

Avatar

James

October 15th, 2020

Android 11 hat mehrere spannende Updates für Entwickler eingeführt, die sie in ihre Apps integrieren können, darunter neue Geräte- und Mediensteuerungen, verbesserte Unterstützung für Foldables und vieles mehr. Zusätzlich zu den neuen Funktionen gibt es auch einige Datenschutzverbesserungen, die Entwickler in ihre Anwendung integrieren müssen, wenn sie ein Upgrade auf Android 11 durchführen und erneut darauf zugreifen. Eine dieser Verbesserungen ist die Einführung der Paketsichtbarkeit, die die Möglichkeit verändert, installierte Anwendungen und Pakete auf dem Gerät eines Nutzers abzufragen.

App-Symbole für E-Mail-Apps und Code zur Abfrage von Intents auf dem Gerät

Wenn Sie einen Browser öffnen oder eine E-Mail senden möchten, muss Ihre Anwendung eine andere Anwendung auf dem Gerät über ein Intent starten und mit ihr interagieren. Vor dem Aufruf von StartActivity ist es am besten, QueryIntentActivities oder ResolveActivity zu verwenden, um sicherzustellen, dass es eine Anwendung gibt, die die Anforderung verarbeiten kann. Wenn Sie Xamarin.Essentials verwenden, haben Sie diese APIs möglicherweise noch nicht gesehen, da die Bibliothek die gesamte Logik für Browser (extern), E-Mail und SMS automatisch für Sie handhabt.

Vor Android 11 konnte jede App ganz einfach alle installierten Anwendungen abfragen und sehen, ob ein bestimmtes Intent geöffnet wird, wenn StartActivity aufgerufen wird. Das hat sich mit Android 11 mit der Einführung der Paketsichtbarkeit geändert. Sie müssen nun angeben, welche Intents und Datenschemata Ihre App abfragen können soll, wenn Ihre App auf Android 11 abzielt.

Android-Projekteinstellungen, die auf Android 11 abzielen

Wenn Sie auf Android 11 abzielen und Ihre Anwendung auf einem Gerät mit Android 11 ausführen, erhalten Sie null Ergebnisse, wenn Sie QueryIntentActivities verwenden. Wenn Sie Xamarin.Essentials verwenden, erhalten Sie ein FeatureNotSupportedException, wenn Sie versuchen, eine der APIs aufzurufen, die Aktivitäten abfragen müssen. Nehmen wir an, Sie verwenden die E-Mail-Funktion von Xamarin.Essentials. Ihr Code könnte wie folgt aussehen:

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 }}

Wenn Ihre App auf Android 10 und früher ausgerichtet wäre, würde sie einfach funktionieren. Mit der Paketsichtbarkeit in Android 11, wenn Sie versuchen, eine E-Mail zu senden, wird Xamarin.Essentials versuchen, nach Paketen zu suchen, die E-Mail unterstützen, und es werden null Ergebnisse zurückgegeben. Dies führt dazu, dass ein FeatureNotSupportedException ausgelöst wird, was nicht ideal ist. Damit Ihre Anwendung in den Paketen sichtbar wird, müssen Sie eine Liste von queries in Ihre AndroidManifest.xml hinzufügen.

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

Wenn Sie mehrere Intents abfragen oder mehrere APIs verwenden, müssen Sie sie alle in die Liste aufnehmen.

<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>

Und da haben Sie es, mit nur einer kleinen Menge an Konfiguration wird Ihre App weiterhin einwandfrei funktionieren, wenn Sie auf Android 11 abzielen.

Mehr erfahren

Lesen Sie unbedingt die offizielle Android 11-Dokumentation über die Sichtbarkeit von Paketen und natürlich die neu aktualisierte Xamarin.Essentials-Dokumentation durch. Schließlich sollten Sie auch die Xamarin.Android 11 Versionshinweise lesen.

Avatar
James Montemagno

Principal Lead Program Manager, .NET Community

Folgen

Schreibe einen Kommentar