Funktionen und APIs – Übersicht

Mit Android 11 werden tolle neue Funktionen und APIs für Entwickler eingeführt. In den folgenden Abschnitten erhalten Sie Informationen zu Funktionen für Ihre Apps und zu den ersten Schritten mit den zugehörigen APIs.

Eine detaillierte Liste der neuen, geänderten und entfernten APIs finden Sie im Bericht zu den API-Unterschieden. Ausführliche Informationen zu den neuen APIs finden Sie in der Android API-Referenz. Neue APIs sind hervorgehoben dargestellt. Wenn du wissen möchtest, in welchen Bereichen sich Plattformänderungen auf deine Apps auswirken können, sieh dir die Verhaltensänderungen bei Android 11 für Apps, die auf Android R ausgerichtet sind und für alle Apps sowie Änderungen beim Datenschutz an.

Neue Funktionen

Gerätesteuerung

Android 11 enthält eine neue ControlsProviderService API, mit der Sie Steuerelemente für verbundene externe Geräte freigeben können. Diese Einstellungen werden im Android-Ein/Aus-Menü unter Gerätesteuerung angezeigt. Weitere Informationen finden Sie unter Externe Geräte steuern.

Mediensteuerung

Mit Android 11 wird die Anzeige von Mediensteuerelementen aktualisiert. Die Mediensteuerelemente erscheinen neben den Schnelleinstellungen. Sitzungen aus mehreren Apps werden in einem karussellartigen Karussell angeordnet, das lokal auf dem Smartphone abgespielte Streams, Remote-Streams, z. B. auf externen Geräten oder Streamingsitzungen erkannte, sowie vorherige, fortsetzbare Sitzungen in der Reihenfolge enthält, in der sie zuletzt abgespielt wurden.

Nutzer können vorherige Sitzungen über das Karussell neu starten, ohne die App starten zu müssen. Zu Beginn der Wiedergabe interagiert der Nutzer wie gewohnt mit der Mediensteuerung.

Weitere Informationen findest du unter Mediensteuerelemente.

Displays

Bessere Unterstützung von Wasserfalldarstellungen

Android 11 bietet mehrere APIs zur Unterstützung von Wasserfalldisplays, die den Rand des Geräts umgeben. Diese Displays werden als Variante von Displays mit Display-Aussparungen behandelt. Die vorhandenen DisplayCutout.getSafeInset…()-Methoden geben jetzt den sicheren Einsatz zurück, um Wasserfallbereiche und Aussparungen zu vermeiden. So rendern Sie Ihre App-Inhalte im Wasserfallbereich:

  • Rufen Sie DisplayCutout.getWaterfallInsets() auf, um die genauen Abmessungen der Einfügung der Vermittlungsabfolge zu erhalten.

  • Legen Sie das Fenster-Layout-Attribut layoutInDisplayCutoutMode auf LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS fest, damit das Fenster an allen Rändern des Bildschirms über die Aussparung und den Wasserfallbereich hinaus erweitert werden kann. Achten Sie darauf, dass sich in der Aussparung oder im Wasserfallbereich keine wesentlichen Inhalte befinden.

Scharnierwinkelsensor und faltbare Smartphones

Android 11 ermöglicht es Apps, die auf Geräten mit scharnierbasierten Bildschirmkonfigurationen ausgeführt werden, den Winkel des Scharniers zu bestimmen. Dazu wird ein neuer Sensor mit TYPE_HINGE_ANGLE und ein neues SensorEvent-Element bereitgestellt, das den Scharnierwinkel überwachen kann und eine Messung in Grad zwischen zwei integrierten Teilen des Geräts bietet. Sie können diese Rohdaten verwenden, um detaillierte Animationen durchzuführen, wenn der Nutzer das Gerät bedient.

Weitere Informationen finden Sie unter Foldables.

Unterhaltungen

Verbesserungen bei der Unterhaltung

Unter Android 11 wurden eine Reihe von Verbesserungen bei der Verarbeitung von Unterhaltungen vorgenommen. Unterhaltungen sind bidirektionale Echtzeit-Kommunikation zwischen zwei oder mehr Personen. Diese Gespräche werden besonders hervorgehoben und Nutzern stehen mehrere neue Optionen für die Interaktion zur Verfügung.

Weitere Informationen zu Unterhaltungen und dazu, wie Ihre App diese unterstützt, finden Sie unter Personen und Unterhaltungen.

Chat-Bubbles

Bubbles stehen Entwicklern jetzt zur Verfügung, um Unterhaltungen im gesamten System einzublenden. Bubbles war eine experimentelle Funktion in Android 10, die über eine Entwickleroption aktiviert wurde. In Android 11 ist dies nicht mehr erforderlich.

Wenn eine App auf Android 11 (API-Level 30) oder höher ausgerichtet ist, werden die Benachrichtigungen nur dann als Bubbles angezeigt, wenn sie die neuen Unterhaltungsanforderungen erfüllen. Insbesondere muss die Benachrichtigung einer Verknüpfung zugeordnet sein.

Vor Android 11 mussten Sie explizit angeben, dass eine Benachrichtigung immer im Dokument-UI-Modus gestartet werden sollte. Ab Android 11 müssen Sie diese Einstellung nicht mehr explizit festlegen. Wenn die Benachrichtigung als Bubble angezeigt wird, legt die Plattform automatisch fest, dass die Benachrichtigung immer im Dokument-UI-Modus gestartet wird.

Es gibt eine Reihe von Verbesserungen an der Leistung von Bubbles und Nutzer können Bubbles für jede App flexibler aktivieren und deaktivieren. Für Entwickler, die experimentelle Unterstützung implementiert haben, gibt es einige Änderungen an den APIs in Android 11:

Visuelle 5G-Anzeigen

Informationen dazu, wie 5G-Anzeigen auf den Geräten der Nutzer angezeigt werden, finden Sie unter Nutzer informieren, wenn sie 5G verwenden.

Datenschutz

Android 11 bringt eine Vielzahl von Änderungen und Einschränkungen zur Verbesserung des Datenschutzes für Nutzer mit sich. Weitere Informationen finden Sie auf der Seite Datenschutz.

Sicherheit

Updates zur biometrischen Authentifizierung

Android 11 bietet mehrere Verbesserungen an der biometrischen Authentifizierung, um Ihnen zu helfen, das Sicherheitsniveau für die Daten Ihrer App zu steuern. Diese Änderungen sind auch in der Jetpack Biometric-Bibliothek enthalten.

Authentifizierungstypen

Mit Android 11 wird die BiometricManager.Authenticators-Oberfläche eingeführt, mit der du die von deiner App unterstützten Authentifizierungstypen deklarieren kannst.

Bestimmen, welcher Authentifizierungstyp verwendet wurde

Nach der Authentifizierung des Nutzers können Sie durch Aufrufen von getAuthenticationType() prüfen, ob er sich mit Geräteanmeldedaten oder biometrischen Anmeldedaten authentifiziert hat.

Zusätzliche Unterstützung für nutzungsabhängige Schlüssel

Android 11 bietet mehr Unterstützung für die Authentifizierung mit Schlüsseln zur Authentifizierung.

Verworfene Methoden

In Android 11 werden die folgenden Methoden eingestellt:

  • Die Methode setDeviceCredentialAllowed().
  • Die Methode setUserAuthenticationValidityDurationSeconds().
  • Die überlastete Version von canAuthenticate() nimmt keine Argumente an.

Sichere Freigabe großer Datasets

In einigen Situationen, z. B. solchen, die maschinelles Lernen oder die Medienwiedergabe beinhalten, möchte Ihre App möglicherweise dasselbe große Dataset wie eine andere App verwenden. Bei früheren Versionen von Android mussten Ihre App und eine andere App jeweils eine separate Kopie desselben Datasets herunterladen.

Zur Reduzierung der Datenredundanz sowohl über das Netzwerk als auch auf dem Laufwerk erlaubt Android 11, diese großen Datasets mithilfe von gemeinsam genutzten Daten-Blobs auf dem Gerät im Cache zu speichern. Weitere Informationen zum Freigeben von Datasets finden Sie in der ausführlichen Anleitung zur Freigabe großer Datasets.

Dateibasierte Verschlüsselung nach einem OTA-Neustart ohne Nutzeranmeldedaten ausführen

Nachdem das Gerät ein OTA-Update abgeschlossen und das Gerät neu gestartet hat, sind die verschlüsselten Schlüssel für Anmeldedaten, die im durch Anmeldedaten geschützten Speicher abgelegt werden, sofort für Vorgänge mit der dateibasierten Verschlüsselung (File-Based Encryption, FBE) verfügbar. Das bedeutet, dass Ihre Anwendung nach einem OTA-Update Vorgänge fortsetzen kann, für die die CE-Schlüssel erforderlich sind, bevor der Nutzer seine PIN, sein Muster oder sein Passwort eingibt.

Leistung und Qualität

Debugging über WLAN

Android 11 unterstützt die kabellose Bereitstellung und Fehlerbehebung für Ihre App von Ihrer Workstation aus über Android Debug Bridge (ADB). Sie können Ihre Debug-fähige Anwendung beispielsweise auf mehreren Remote-Geräten bereitstellen, ohne Ihr Gerät physisch über USB anzuschließen und mit häufigen USB-Verbindungsproblemen wie der Treiberinstallation zu kämpfen. Weitere Informationen finden Sie unter Apps auf einem Hardwaregerät ausführen.

Inkrementelle ADB-APK-Installation

Die Installation großer APKs (über 2 GB) auf einem Gerät kann lange dauern, selbst wenn nur eine kleine Änderung an einer App vorgenommen wird. Durch die inkrementelle APK-Installation (ADB (Android Debug Bridge) mit ADB (Android Debug Bridge) wird dieser Vorgang beschleunigt, da so viel APK installiert wird, dass die App gestartet werden kann, während die verbleibenden Daten im Hintergrund gestreamt werden). adb install verwendet dieses Feature automatisch, wenn es vom Gerät unterstützt wird und Sie die neuesten SDK Platform-Tools installiert haben. Wird sie nicht unterstützt, wird die Standardinstallationsmethode automatisch verwendet.

Verwenden Sie dazu den folgenden adb-Befehl. Wenn das Gerät keine inkrementelle Installation unterstützt, schlägt der Befehl fehl und gibt eine ausführliche Erklärung aus.

adb install --incremental

Bevor Sie eine inkrementelle ADB-APK-Installation ausführen, müssen Sie Ihr APK signieren und eine APK Signature Scheme v4-Datei erstellen. Die v4-Signaturdatei muss neben dem APK platziert werden, damit diese Funktion funktioniert.

Fehlererkennung mithilfe der nativen Arbeitsspeicherzuweisung

GWP-ASan ist eine native Funktion zur Arbeitsspeicherzuweisung, mit der Fehler nach der Verwendung und Heap-Pufferüberlauf gefunden werden können. Sie können dieses Feature global oder für bestimmte Unterprozesse Ihrer Anwendung aktivieren. Weitere Informationen finden Sie im GWP-Asan-Leitfaden.

Neural Networks API 1.3

Android 11 erweitert und verbessert die Neural Networks API (NNAPI).

Neue Vorgänge

Mit NNAPI 1.3 wurde der neue Operandentyp TENSOR_QUANT8_ASYMM_SIGNED eingeführt, um das neue Quantisierungsschema von TensorFlow Lite zu unterstützen.

Außerdem werden mit NNAPI 1.3 die folgenden neuen Vorgänge eingeführt:

  • QUANTIZED_LSTM
  • IF
  • WHILE
  • ELU
  • HARD_SWISH
  • FILL
  • RANK

Neue ML-Steuerelemente

NNAPI 1.3 bietet neue Steuerelemente für einen reibungslosen Ablauf des maschinellen Lernens:

NDK Thermal API

Wenn Geräte zu warm werden, können sie CPU und/oder GPU drosseln, was sich unerwartet auf Anwendungen auswirken kann. Bei Apps oder Spielen, die komplexe Grafiken, hohe Rechenleistung oder anhaltende Netzwerkaktivität enthalten, ist die Wahrscheinlichkeit von Problemen höher.

Mit der NDK Thermal API in Android 11 kannst du Temperaturänderungen am Gerät beobachten und Maßnahmen ergreifen, um den Stromverbrauch zu senken und die Gerätetemperatur zu senken. Diese API ähnelt der Java Thermal API. Sie können sie verwenden, um Benachrichtigungen zu Änderungen des Temperaturstatus zu erhalten oder den aktuellen Status direkt abzufragen.

Text und Eingabe

Verbesserte IME-Übergänge

Mit Android 11 werden neue APIs eingeführt, um Übergänge für Eingabemethoden-Editoren (IMEs), z. B. Bildschirmtastaturen, zu verbessern. Mit diesen APIs können Sie die Inhalte Ihrer App leichter so anpassen, dass sie mit dem Erscheinungsbild und dem Verschwinden des IME sowie anderen Elementen wie den Status- und Navigationsleisten übereinstimmen.

Wenn ein IME angezeigt werden soll, während eine EditText im Fokus liegt, rufen Sie view.getInsetsController().show(Type.ime()) auf. Sie können diese Methode für jede Ansicht in derselben Hierarchie wie das fokussierte EditText aufrufen. Sie müssen sie nicht speziell für die EditText aufrufen. Rufen Sie view.getInsetsController().hide(Type.ime()) auf, um den IME auszublenden. Wenn Sie prüfen möchten, ob ein IME derzeit sichtbar ist, rufen Sie view.getRootWindowInsets().isVisible(Type.ime()) auf.

Wenn Sie die Ansichten Ihrer App mit der Darstellung und dem Verschwinden des IMEs synchronisieren möchten, legen Sie einen Listener für eine Ansicht fest, indem Sie WindowInsetsAnimation.Callback für View.setWindowInsetsAnimationCallback() angeben. Sie können diesen Listener für beliebige Ansichten festlegen. Es muss kein EditText sein. Der IME ruft die Methode onPrepare() des Listeners auf und ruft dann zu Beginn des Übergangs onStart() auf. Anschließend wird bei jeder Fortsetzung des Übergangs onProgress() aufgerufen. Wenn der Wechsel abgeschlossen ist, ruft der IME onEnd() auf. Durch Aufrufen von WindowInsetsAnimation.getFraction() können Sie jederzeit während der Umstellung sehen, wie viel Fortschritt damit gemacht wurde.

Ein Beispiel für die Verwendung dieser APIs finden Sie im neuen Codebeispiel WindowInsetsAnimation.

IME-Animation steuern

Sie können auch die IME-Animation oder die Animation einer anderen Systemleiste wie der Navigationsleiste steuern. Rufen Sie dazu zuerst setOnApplyWindowInsetsListener() auf, um einen neuen Listener für Änderungen am Fenstereinsatz festzulegen:

Kotlin

rootView.setOnApplyWindowInsetsListener { rootView, windowInsets ->
    val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime())
    rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, 
                          barsIme.bottom)

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
    WindowInsets.CONSUMED
}

Java

mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
   @Override
   public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {

       Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime());
       mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right,
                             barsIme.bottom);

      // We return the new WindowInsets.CONSUMED to stop the insets being
      // dispatched any further into the view hierarchy. This replaces the
      // deprecated WindowInsets.consumeSystemWindowInsets() and related
      // functions.
       return WindowInsets.CONSUMED;
   }
});

Wenn Sie den IME oder eine andere Systemleiste verschieben möchten, rufen Sie die Methode controlWindowInsetsAnimation() des Controllers auf:

Kotlin

view.windowInsetsController.controlWindowInsetsAnimation(
       Type.ime(),
       1000,
       LinearInterpolator(),
       cancellationSignal,
       object : WindowInsetsAnimationControlListener() {
           fun onReady(controller: WindowInsetsAnimationController,
                         types: Int) {
               // update IME inset
             controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */)
           }
       }
);

Java

mRoot.getWindowInsetsController().controlWindowInsetsAnimation(
       Type.ime(), 1000, new LinearInterpolator(), cancellationSignal,
       new WindowInsetsAnimationControlListener() {
           @Override
           public void onReady(
                   @NonNull WindowInsetsAnimationController controller,
                   int types
                   ) {
                   // update IME inset
                   controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset),
                           1f /* alpha */, 0.1 /* fraction progress */);
           }

           @Override
           public void onCancelled() {}
       });

Aktualisierungen der ICU-Bibliotheken

Android 11 aktualisiert das Paket android.icu so, dass Version 66 der ICU-Bibliothek verwendet wird, im Vergleich zu Version 63 in Android 10. Die neue Bibliotheksversion enthält aktualisierte CLDR-Gebietsschemadaten und eine Reihe von Verbesserungen an der Unterstützung für die Internationalisierung in Android.

Zu den wichtigsten Änderungen in den neuen Bibliotheksversionen gehören:

  • Viele Formatierungs-APIs unterstützen jetzt einen neuen Rückgabeobjekttyp, der FormattedValue erweitert.
  • Die LocaleMatcher API wurde um eine Builder-Klasse, Unterstützung für den Typ java.util.Locale und eine Ergebnisklasse mit zusätzlichen Daten zu einer Übereinstimmung erweitert.
  • Unicode 13 wird jetzt unterstützt.

Medien

MediaCodec-Zwischenspeicher werden zugewiesen

Android 11 enthält neue MediaCodec APIs, die Apps mehr Kontrolle bei der Zuweisung von Eingabe- und Ausgabezwischenspeichern geben. Dadurch kann Ihre App den Arbeitsspeicher effizienter verwalten.

Neue Kurse:
Neue Methoden:

Außerdem hat sich das Verhalten der beiden Methoden in MediaCodec.Callback() geändert:

onInputBufferAvailable()
Anstatt MediaCodec.getInputBuffer() und MediaCodec.queueInputBuffer() mit dem Index aufzurufen und die Block Model API zu verwenden, sollten Apps MediaCodec.getQueueRequest mit dem Index verwenden und einen LinearBlock/HardwareBuffer an den Slot anhängen.
onOutputBufferAvailable()
Anstatt MediaCodec.getOutputBuffer() mit dem Index aufzurufen, können Anwendungen MediaCodec.getOutputFrame() mit dem Index verwenden, um das OutputFrame-Objekt mit weiteren Informationen und LinearBlock/HardwareBuffer-Zwischenspeichern abzurufen.

Decodierung mit niedriger Latenz in MediaCodec

Unter Android 11 wird MediaCodec verbessert, um die Decodierung mit niedriger Latenz für Spiele und andere Echtzeitanwendungen zu unterstützen. Sie können prüfen, ob ein Codec die Decodierung mit niedriger Latenz unterstützt. Übergeben Sie dazu FEATURE_LowLatency an MediaCodecInfo.CodecCapabilities.isFeatureSupported().

Führen Sie einen der folgenden Schritte aus, um die Decodierung mit niedriger Latenz zu aktivieren oder zu deaktivieren:

Neue AAudio-Funktion AAudioStream_release()

Mit der Funktion AAudioStream_close() wird ein Audiostream gleichzeitig freigegeben und geschlossen. Das kann gefährlich sein. Wenn ein anderer Prozess versucht, auf den Stream zuzugreifen, nachdem er geschlossen wurde, stürzt der Prozess ab.

Die neue Funktion AAudioStream_release() gibt den Stream frei, schließt ihn aber nicht. Dadurch werden seine Ressourcen freigegeben und der Stream in einem bekannten Zustand belassen. Das Objekt bleibt bestehen, bis Sie AAudioStream_close() aufrufen.

MediaParser-API

MediaParser ist eine neue Low-Level-API zur Medienextraktion. Es ist flexibler als MediaExtractor und bietet zusätzliche Kontrolle über die Funktion zur Medienextraktion.

Audioaufnahme von einem USB-Gerät

Wenn eine Anwendung ohne RECORD_AUDIO-Berechtigung UsbManager verwendet, um direkten Zugriff auf ein USB-Audiogerät mit Audioaufnahmefunktion (z. B. ein USB-Headset) anzufordern, wird eine neue Warnmeldung angezeigt, in der der Nutzer aufgefordert wird, die Berechtigung zur Verwendung des Geräts zu bestätigen. Das System ignoriert jede Option „Immer verwenden“. Daher muss der Nutzer jedes Mal, wenn eine Anwendung Zugriff anfordert, die Warnung bestätigen und die Berechtigung erteilen.

Um dies zu vermeiden, sollte deine App die Berechtigung RECORD_AUDIO anfordern.

Gleichzeitiger Mikrofonzugriff

In Android 11 werden den APIs AudioRecord, MediaRecorder und AAudioStream neue Methoden hinzugefügt. Diese Methoden aktivieren und deaktivieren die Möglichkeit, unabhängig vom ausgewählten Anwendungsfall gleichzeitig Daten zu erfassen. Weitere Informationen finden Sie unter Audioeingabe freigeben.

Ausgabeauswahl

Mit Android 11 wird ein neues Verhalten für Anwendungen implementiert, die die Cast API und die Mediarouter API verwenden.

Die Wechseloptionen werden nicht nur in einer App angezeigt, sondern auch im Mediaplayer des Systems. Auf diese Weise können Nutzer nahtlos zwischen Geräten wechseln, wenn sie den Wiedergabe- und Wiedergabekontext ändern, z. B. wenn sie sich Videos in der Küche oder auf einem Smartphone ansehen oder zu Hause oder im Auto Audioinhalte hören. Siehe Ausgabeauswahl.

Konnektivität

Verbesserungen beim WLAN-Passpoint

Informationen zu den in Android 11 hinzugefügten Passpoint-Funktionen findest du unter Passpoint.

Wi-Fi Suggestion API ist erweitert

Mit Android 11 wird die Wi-Fi Suggestion API erweitert, um die Netzwerkverwaltungsfunktionen deiner App zu verbessern. Dazu gehören:

  • Konnektivitätsmanagement-Anwendungen können ihre eigenen Netzwerke verwalten, indem sie Anfragen zum Trennen der Verbindung zulassen.
  • Passpoint-Netzwerke sind in die Suggestion API eingebunden und können dem Nutzer vorgeschlagen werden.
  • Mit Analytics APIs erhalten Sie Informationen zur Qualität Ihrer Netzwerke.

Updates für CallScreeningService

Ab Android 11 kann ein CallScreeningService Informationen zum STIR/SHAKEN-Bestätigungsstatus (Verstat) für eingehende Anrufe anfordern. Diese Informationen werden als Teil der Anrufdetails für eingehende Anrufe bereitgestellt.

Wenn ein CallScreeningService die Berechtigung READ_CONTACTS enthält, wird die App über eingehende oder ausgehende Anrufe von einer Nummer in den Kontakten des Nutzers benachrichtigt.

Weitere Informationen finden Sie unter Anrufer-ID-Spoofing verhindern.

Open Mobile API-Updates

Informationen zum OMAPI-Support unter Android 11 und höher finden Sie unter Open Mobile API-Leserunterstützung.

Leistungsstarke VPNs

Anwendungen, die auf API-Level 30 und höher ausgerichtet sind oder auf Geräten mit API-Level 29 und höher ausgeführt werden, können IKEv2/IPsec auf VPNs für vom Nutzer konfigurierte und anwendungsbasierte VPNs anwenden.

Die VPNs werden betriebssystemspezifisch ausgeführt und vereinfachen den Code, der zum Herstellen von IKEv2/IPsec-VPN-Verbindungen in einer Anwendung erforderlich ist.

Prozessbasierte Netzwerkzugriffssteuerung

Informationen zum Aktivieren des Netzwerkzugriffs für einzelne Prozesse finden Sie unter Netzwerknutzung verwalten.

Mehrere installierte Passpoint-Konfigurationen mit demselben FQDN zulassen

Ab Android 11 können Sie mit PasspointConfiguration.getUniqueId() eine eindeutige Kennung für ein PasspointConfiguration-Objekt abrufen. Dadurch können die Nutzer Ihrer App mehrere Profile mit demselben voll qualifizierten Domainnamen (FQDN) installieren.

Diese Funktion ist hilfreich, wenn ein Mobilfunkanbieter mehr als eine Kombination aus Mobile Country Code (MCC) und Mobile Network Code (MNC) in seinem Netzwerk bereitstellt, aber nur einen einzigen FQDN hat. Unter Android 11 und höher ist es möglich, mehr als ein Profil mit demselben FQDN zu installieren, der dem Netzwerk des Home-Anbieters entspricht, wenn der Nutzer eine SIM mit einem Kundencenter-Konto oder einem MNC installiert.

GNSS-Antennenunterstützung

In Android 11 wird die Klasse GnssAntennaInfo eingeführt. Damit kann Ihre App die zentimetergenaue Positionierung, die das Global Navigation Satellite System (GNSS) bietet, besser nutzen.

Weitere Informationen finden Sie im Leitfaden zu Informationen zur Antennenkalibrierung.

Grafik

NDK-Bilddecoder

Die NDK ImageDecoder API bietet eine Standard-API für Android-C/C++-Apps, mit der Bilder direkt decodiert werden können. App-Entwickler müssen die Framework APIs (über JNI) nicht mehr verwenden oder Bilddecodierungsbibliotheken von Drittanbietern bündeln. Weitere Informationen finden Sie im Entwicklerleitfaden für Bilddecoder.

Frame rate API

Android 11 bietet eine API, mit der Apps das System über die beabsichtigte Framerate informieren können, um Geräte, die mehrere Aktualisierungsraten unterstützen, unübersichtlich zu machen. Informationen zur Verwendung dieser API finden Sie unter Framerate.

Unterstützung für niedrige Latenz anfordern und prüfen

Bestimmte Bildschirme können die Grafiknachverarbeitung ausführen, z. B. einige externe Bildschirme und Fernseher. Diese Nachverarbeitung verbessert die Grafik, kann aber die Latenz erhöhen. Neuere Bildschirme, die HDMI 2.1 unterstützen, haben einen automatischen Modus mit niedriger Latenz (ALLM, auch als Spielmodus bezeichnet), der die Latenz durch Deaktivieren dieser Nachverarbeitung minimiert. Weitere Informationen zu ALLM finden Sie in der HDMI 2.1-Spezifikation.

Ein Fenster kann die Verwendung des automatischen Modus mit niedriger Latenz anfordern, sofern er verfügbar ist. ALLM ist besonders nützlich für Anwendungen wie Spiele und Videokonferenzen, bei denen eine niedrige Latenz wichtiger ist als die bestmögliche Grafik.

Wenn Sie die minimale Nachverarbeitung aktivieren oder deaktivieren möchten, rufen Sie Window.setPreferMinimalPostProcessing() auf oder legen Sie das Attribut preferMinimalPostProcessing des Fensters auf true fest. Nicht alle Displays unterstützen eine minimale Nachverarbeitung. Um herauszufinden, ob eine bestimmte Anzeige sie unterstützt, rufen Sie die neue Methode Display.isMinimalPostProcessingSupported() auf.

Leistungsstarke Einschleusung von Debug-Ebenen für Grafiken

Anwendungen können jetzt externe Grafikebenen (GLES, Vulkan) in den nativen Anwendungscode laden, um die gleiche Funktionalität wie eine Debug-fähige Anwendung bereitzustellen, ohne dass dies zu Leistungseinbußen führt. Diese Funktion ist besonders wichtig, wenn Sie ein Profil für Ihre Anwendung mit Tools wie GAPID erstellen. Wenn Sie ein Profil für Ihre App erstellen möchten, fügen Sie das folgende Meta-Datenelement in die Manifestdatei Ihrer App ein, anstatt die Anwendung debug-fähig zu machen:

<application ... >
    <meta-data android:name="com.android.graphics.injectLayers.enable"
                  android:value="true" />
</application>

Bilder und Kamera

Töne und Vibrationen für Benachrichtigungen bei aktiver Aufnahme stummschalten

Ab Android 11 können Sie bei aktiver Nutzung der Kamera in Ihrer App nur Vibrationen, sowohl Töne als auch Vibrationen stummschalten oder aber setCameraAudioRestriction() nicht verwenden.

Erweiterte Kameraunterstützung im Android-Emulator

Informationen zur erweiterten Unterstützung für Kameras im Emulator ab Android 11 finden Sie unter Kameraunterstützung.

Unterstützung für die gleichzeitige Verwendung mehrerer Kameras

Unter Android 11 werden APIs zur Unterstützung von Abfragen für die gleichzeitige Verwendung mehrerer Kameras hinzugefügt, einschließlich einer Front- und Rückkamera.

Mit den folgenden Methoden können Sie prüfen, ob das Gerät, auf dem Ihre App ausgeführt wird, unterstützt wird:

  • getConcurrentCameraIds() gibt Set von Kombinationen von Kamera-IDs zurück, die bei Konfiguration im gleichen Anwendungsprozess gleichzeitig mit garantierten Streamkombinationen gestreamt werden können.
  • isConcurrentSessionConfigurationSupported() fragt ab, ob Kamerageräte gleichzeitig die entsprechenden Sitzungskonfigurationen unterstützen können.

Bessere Unterstützung für HEIF-Bilder mit mehreren Frames

Ab Android 11 gibt die Methode eine AnimatedImageDrawable zurück, die die gesamte Bildsequenz enthält, wenn Sie ImageDecoder.decodeDrawable() aufrufen und ein HEIF-Bild übergeben, das eine Folge von Frames enthält (z. B. eine Animation oder ein Bilderfolge). In früheren Android-Versionen wurde mit der Methode nur ein BitmapDrawable eines einzelnen Frames zurückgegeben.

Wenn die HEIF-Grafik mehrere Frames enthält, die nicht in einer bestimmten Reihenfolge sind, können Sie einen einzelnen Frame abrufen, indem Sie MediaMetadataRetriever.getImageAtIndex() aufrufen.

Bedienungshilfen

Updates für Entwickler von Bedienungshilfen

Wenn du eine benutzerdefinierte Bedienungshilfe erstellst, kannst du die folgenden Funktionen in Android 11 verwenden:

  • Die an den Nutzer gerichtete Erklärungen zu einer Bedienungshilfe können jetzt zusätzlich zu reinem Text auch HTML und Bilder enthalten. Durch diese Flexibilität ist es für Endnutzer einfacher, zu erklären, was Ihr Dienst tut und wie er ihnen helfen kann.
  • Wenn Sie mit einer Beschreibung des Zustands eines UI-Elements arbeiten möchten, die semantisch aussagekräftiger als contentDescription ist, rufen Sie die Methode getStateDescription() auf.
  • Wenn Sie möchten, dass Touch-Ereignisse den Touch Explorer des Systems umgehen, rufen Sie setTouchExplorationPassthroughRegion() auf. Wenn Sie möchten, dass Gesten den Gestendetektor des Systems umgehen, rufen Sie setGestureDetectionPassthroughRegion() auf.
  • Sie können IME-Aktionen wie „Eingabe“ und „Weiter“ sowie Screenshots von Fenstern anfordern, in denen das Flag FLAG_SECURE nicht aktiviert ist.

Zusätzliche Funktionen

Gründe für das Beenden von App-Prozessen

In Android 11 wird die Methode ActivityManager.getHistoricalProcessExitReasons() eingeführt, die die Gründe für kürzlich erfolgte Prozessbeendigungen meldet. Anwendungen können diese Methode verwenden, um Absturzdiagnoseinformationen zu erfassen, z. B. ob eine Prozessbeendigung auf ANR-Fehler, Speicherprobleme oder andere Gründe zurückzuführen ist. Außerdem können Sie mit der neuen Methode setProcessStateSummary() Informationen zu benutzerdefinierten Status für eine spätere Analyse speichern.

Die Methode getHistoricalProcessExitReasons() gibt Instanzen der Klasse ApplicationExitInfo zurück, die Informationen zum Beenden eines Anwendungsprozesses enthält. Durch Aufrufen von getReason() für eine Instanz dieser Klasse können Sie ermitteln, warum der Prozess Ihrer Anwendung beendet wurde. Ein Rückgabewert von REASON_CRASH bedeutet beispielsweise, dass in Ihrer Anwendung eine unbehandelte Ausnahme aufgetreten ist. Wenn Ihre Anwendung die Eindeutigkeit für Exit-Ereignisse gewährleisten muss, kann sie eine anwendungsspezifische Kennung beibehalten, z. B. einen Hashwert, der auf dem Zeitstempel der Methode getTimestamp() basiert.

Zusätzliche Ressourcen

Weitere Informationen findest du im Artikel zu neuen Android 11-Tools, mit denen du Apps sicherer und stabiler machen kannst auf Medium.

Ressourcenladeprogramme

Mit Android 11 wird eine neue API eingeführt, mit der Apps dynamisch erweitern können, wie Ressourcen gesucht und geladen werden. Die neuen API-Klassen ResourcesLoader und ResourcesProvider sind in erster Linie für die Bereitstellung der neuen Funktion verantwortlich. Zusammen bieten sie die Möglichkeit, zusätzliche Ressourcen und Assets bereitzustellen oder die Werte vorhandener Ressourcen und Assets zu ändern.

ResourcesLoader-Objekte sind Container, die ResourcesProvider-Objekte für die Resources-Instanz einer Anwendung bereitstellen. ResourcesProvider-Objekte wiederum bieten Methoden zum Laden von Ressourcendaten aus APKs und Ressourcentabellen.

Ein primärer Anwendungsfall für diese API ist das Laden benutzerdefinierter Assets. Du kannst loadFromDirectory() verwenden, um ein ResourcesProvider zu erstellen, das die Auflösung von dateibasierten Ressourcen und Assets weiterleitet und so ein bestimmtes Verzeichnis und nicht das Anwendungs-APK durchsucht. Sie können auf diese Assets über die Methodenfamilie open() aus der API-Klasse AssetManager zugreifen, genau wie auf Assets, die im APK gebündelt sind.

APK-Signaturschema v4

Android 11 unterstützt jetzt APK Signature Scheme v4. Dieses Schema erstellt eine neue Art von Signatur in einer separaten Datei (apk-name.apk.idsig), ist ansonsten aber mit v2 und v3 vergleichbar. Es werden keine Änderungen am APK vorgenommen. Dieses Schema unterstützt die inkrementelle ADB-APK-Installation, was die APK-Installation beschleunigt.

Dynamische Intent-Filter

Zum Empfangen von Intents muss eine App bei der Kompilierung deklarieren, welche Datentypen empfangen werden kann. Dazu wird im App-Manifest ein Intent-Filter definiert. In Android 10 und niedriger haben Apps keine Möglichkeit, ihre Intent-Filter während der Laufzeit zu ändern. Dies stellt ein Problem für Virtualisierungsanwendungen wie virtuelle Maschinen und Remote-Desktops dar, da sie nicht genau wissen können, welche Software der Nutzer darin installiert.

Mit Android 11 werden MIME-Gruppen eingeführt. Dies ist ein neues Manifestelement, mit dem eine App einen dynamischen Satz von MIME-Typen in einem Intent-Filter deklarieren und zur Laufzeit programmatisch ändern kann. Um eine MIME-Gruppe zu verwenden, fügen Sie ein Datenelement mit dem neuen Attribut android:mimeGroup in Ihr App-Manifest ein:

<intent-filter>
  <action android:name="android.intent.action.SEND"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeGroup="myMimeGroup"/>
</intent-filter>

Der Wert des Attributs android:mimeGroup ist eine beliebige String-ID, die die MIME-Gruppe zur Laufzeit identifiziert. Sie können auf den Inhalt einer MIME-Gruppe zugreifen und sie aktualisieren. Dazu übergeben Sie die ID an die folgenden neuen Methoden in der API-Klasse PackageManager:

Wenn Sie einer MIME-Gruppe programmatisch einen MIME-Typ hinzufügen, funktioniert er genauso wie ein statischer MIME-Typ, der explizit im Manifest deklariert wurde.

Verbesserungen bei Autofill

Mit Android 11 wurden Verbesserungen für Autofill-Dienste eingeführt.

Hinweis-IDs in AssistStructure.ViewNode

Autofill-Dienste können häufig einen Signatur-Hash für eine Ansicht anhand der Attribute der Ansicht berechnen. Der Ansichtshinweis ist besonders gut für die Berechnung eines Signatur-Hashs geeignet. Der Hinweisstring kann sich jedoch je nach Sprache des Smartphones ändern. Zur Lösung dieses Problems wird AssistStructure.ViewNode in Android 11 um eine neue getHintIdEntry()-Methode erweitert, die die Ressourcen-ID für den Hinweistext einer Ansicht zurückgibt. Diese Methode stellt einen sprachunabhängigen Wert bereit, mit dem Sie Signatur-Hashes berechnen können.

Datasets – angezeigte Ereignisse

Damit Autofill-Dienste ihre Vorschläge verbessern können, bietet Android 11 eine Möglichkeit, Fälle zu identifizieren, in denen ein Autofill-Dienst Datasets präsentiert hat, der Nutzer aber keine davon ausgewählt hat. In Android 11 meldet FillEventHistory einen neuen Ereignistyp TYPE_DATASETS_SHOWN. FillEventHistory protokolliert jedes Mal ein Ereignis dieses Typs, wenn der Autofill-Dienst dem Nutzer ein oder mehrere Datasets bereitstellt. Autofill-Dienste können diese Ereignisse in Verbindung mit dem vorhandenen Ereignis TYPE_DATASET_SELECTED verwenden, um festzustellen, ob der Nutzer eine der bereitgestellten Autofill-Optionen ausgewählt hat.

IME-Integration

Tastaturen und andere IMEs können jetzt Autofill-Vorschläge inline, in einer Vorschlagsleiste oder einer ähnlichen Oberfläche statt in einem Drop-down-Menü anzeigen. Um vertrauliche Informationen wie Passwörter und Kreditkartennummern zu schützen, werden die Vorschläge dem Nutzer angezeigt, sind dem IME aber erst bekannt, wenn er einen ausgewählt hat. Informationen dazu, wie IMEs und Passwortmanager diese Funktion unterstützen können, finden Sie unter Autofill in Tastaturen einbinden.

Datenfreigabe für Content Capture-Dienst

Ab Android 11 kann deine App Daten mit dem Inhaltserfassungsdienst des Geräts teilen. Diese Funktion erleichtert es einem Gerät, kontextbasierte Informationen bereitzustellen, wie z. B. die Anzeige des Namens eines Songs, der gerade in der Umgebung des Nutzers abgespielt wird.

Wenn Sie Daten aus Ihrer Anwendung für den Inhaltserfassungsdienst verfügbar machen möchten, rufen Sie die Methode shareData() für eine Instanz von ContentCaptureManager auf. Wenn das System die Anfrage zur Datenfreigabe akzeptiert, erhält Ihre Anwendung einen schreibgeschützten Dateideskriptor, der an den Content Capture-Dienst weitergegeben wird.