Funktionen und APIs – Übersicht

Android 11 bietet tolle neue Funktionen und APIs für Entwickler. 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 „API-Unterschiede“. Weitere Informationen zu neuen APIs finden Sie in der Android API-Referenz. Neue APIs sind hervorgehoben. Wenn du mehr darüber erfahren möchtest, in welchen Bereichen sich Plattformänderungen auf deine Apps auswirken können, solltest du dir die Verhaltensänderungen bei Android 11 für Apps, die auf Android R und für alle Apps ausgerichtet sind, sowie die Änderungen am Datenschutz ansehen.

Neue Erlebnisse

Gerätesteuerung

Android 11 enthält eine neue ControlsProviderService API, mit der du Steuerelemente für verbundene, externe Geräte verfügbar machen kannst. Diese Steuerelemente finden Sie im Android-Ein/Aus-Menü unter Gerätesteuerung. Weitere Informationen finden Sie unter Externe Geräte steuern.

Mediensteuerung

Unter Android 11 wird die Anzeige von Mediensteuerelementen aktualisiert. Die Mediensteuerelemente erscheinen in der Nähe der Schnelleinstellungen. Sitzungen aus mehreren Apps werden in einem wischbaren Karussell angeordnet. Es enthält Streams, die lokal auf dem Smartphone wiedergegeben werden, Remote-Streams (z. B. auf externen Geräten erkannte Streams oder Übertragungssitzungen) sowie frühere, fortsetzbare Sitzungen in der Reihenfolge, in der sie zuletzt abgespielt wurden.

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

Weitere Informationen finden Sie unter Mediensteuerelemente.

Bildschirme

Bessere Unterstützung für Wasserfall-Displays

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

  • Rufen Sie DisplayCutout.getWaterfallInsets() auf, um die genauen Abmessungen des Wasserfalls zu erhalten.

  • Setzen Sie das Fensterlayoutattribut layoutInDisplayCutoutMode auf LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS, damit sich das Fenster in die Aussparungs- und Wasserfallbereiche an allen Rändern des Bildschirms erweitern kann. Achten Sie darauf, dass sich keine wesentlichen Inhalte in den Aussparungs- oder Wasserfallbereichen befinden.

Scharnierwinkelsensor und faltbare Smartphones

Mit Android 11 können Apps, die auf Geräten mit auf Scharnier basierenden Bildschirmkonfigurationen ausgeführt werden, den Winkel des Scharniers bestimmen. Dazu wird ein neuer Sensor mit TYPE_HINGE_ANGLE und ein neuer SensorEvent bereitgestellt, der den Scharnierwinkel überwacht und zwischen zwei ganzheitlichen Teilen des Geräts einen Grad in Grad liefert. Anhand dieser Rohmesswerte lassen sich detaillierte Animationen erstellen, während der Nutzer das Gerät bedient.

Weitere Informationen finden Sie unter Foldables.

Unterhaltungen

Verbesserte Unterhaltungen

Unter Android 11 wurden eine Reihe von Verbesserungen an der Verarbeitung von Unterhaltungen vorgenommen. Unterhaltungen sind bidirektionale Echtzeitkommunikation zwischen zwei oder mehr Personen. Diese Unterhaltungen sind besonders beliebt und Nutzer haben mehrere neue Möglichkeiten, mit ihnen zu interagieren.

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

Chat-Bubbles

Für Entwickler sind jetzt Bubbles verfügbar, um Unterhaltungen im gesamten System einzublenden. Bubbles war eine experimentelle Funktion in Android 10, die über eine Entwickleroption aktiviert wurde. Bei Android 11 ist dies nicht mehr erforderlich.

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

Vor Android 11 mussten Sie für eine Benachrichtigung als Bubbles explizit angeben, dass die Benachrichtigung immer im UI-Modus für Dokumente gestartet wurde. Ab Android 11 müssen Sie diese Einstellung nicht mehr explizit vornehmen. Wenn die Benachrichtigung als Bubble angezeigt wird, legt die Plattform die Benachrichtigung automatisch so fest, dass sie immer im UI-Modus des Dokuments gestartet wird.

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

Visuelle 5G-Anzeigen

Informationen zur Anzeige von 5G-Indikatoren auf Nutzergeräten finden Sie unter Nutzer informieren, wenn sie 5G verwenden.

Datenschutz

In Android 11 wurden viele Änderungen und Einschränkungen vorgenommen, um den Datenschutz für Nutzer zu verbessern. Weitere Informationen finden Sie auf der Seite Datenschutz.

Sicherheit

Updates zur biometrischen Authentifizierung

Damit Sie die Sicherheit Ihrer App-Daten besser steuern können, bietet Android 11 mehrere Verbesserungen an der biometrischen Authentifizierung. Diese Änderungen erscheinen auch in der Jetpack Biometric-Bibliothek.

Authentifizierungstypen

In Android 11 wird die BiometricManager.Authenticators-Oberfläche eingeführt, mit der du die Authentifizierungstypen angeben kannst, die deine App unterstützt.

Herausfinden, welcher Authentifizierungstyp verwendet wurde

Nach der Authentifizierung des Nutzers können Sie prüfen, ob er sich mit Geräte- oder biometrischen Anmeldedaten authentifiziert hat. Dazu rufen Sie getAuthenticationType() auf.

Zusätzliche Unterstützung für Schlüssel für die Authentifizierung pro Nutzung

Android 11 bietet mehr Unterstützung für die Authentifizierung mit Auth-per-Use-Schlüsseln.

Verworfene Methoden

In Android 11 werden die folgenden Methoden eingestellt:

  • Die Methode setDeviceCredentialAllowed().
  • Die Methode setUserAuthenticationValidityDurationSeconds().
  • Die überlastete Version von canAuthenticate(), die keine Argumente annimmt.

Sichere Freigabe großer Datasets

In einigen Situationen, z. B. wenn es um maschinelles Lernen oder die Medienwiedergabe geht, kann es sein, dass Ihre App denselben großen Datensatz wie eine andere App verwenden möchte. In früheren Android-Versionen müssen Ihre App und eine andere App jeweils eine separate Kopie desselben Datasets herunterladen.

Um die Datenredundanz sowohl im Netzwerk als auch auf der Festplatte zu reduzieren, ermöglicht Android 11, dass diese großen Datasets mithilfe von gemeinsam genutzten Daten-Blobs auf dem Gerät im Cache gespeichert werden. Weitere Informationen zur Freigabe von Datasets finden Sie im ausführlichen Leitfaden zur Freigabe großer Datasets.

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

Nachdem das Gerät ein OTA-Update abgeschlossen und neu gestartet wurde, sind die mit Anmeldedaten verschlüsselten Schlüssel (CE), die in einem 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 deine App 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 drahtlose Bereitstellung und Fehlerbehebung von Apps von Ihrer Workstation aus über Android Debug Bridge (ADB). So können Sie beispielsweise Ihre debugfähige App auf mehreren Remote-Geräten bereitstellen, ohne das Gerät physisch über USB verbinden zu müssen und häufige USB-Verbindungsprobleme wie die Treiberinstallation zu vermeiden. Weitere Informationen finden Sie unter Anwendungen auf einem Hardwaregerät ausführen.

Inkrementelle ADB-APK-Installation

Die Installation großer APKs (mehr als 2 GB) auf einem Gerät kann lange dauern, auch wenn nur eine kleine Änderung an einer App vorgenommen wird. Die inkrementelle APK-Installation von ADB (Android Debug Bridge) beschleunigt diesen Prozess, da so viel APK installiert ist, dass die App gestartet wird, während die verbleibenden Daten im Hintergrund gestreamt werden. adb install verwendet diese Funktion automatisch, wenn sie vom Gerät unterstützt wird und du die neuesten SDK Platform Tools installiert hast. Wenn sie nicht unterstützt wird, wird die Standardinstallationsmethode im Hintergrund verwendet.

Verwenden Sie den folgenden adb-Befehl, um dieses Feature zu nutzen. 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 die Installation eines inkrementellen ADB-APKs ausführen, müssen Sie Ihr APK signieren und eine APK-Signaturschema v4-Datei erstellen. Die V4-Signaturdatei muss neben dem APK platziert werden, damit diese Funktion funktioniert.

Fehlererkennung mit dem nativen Arbeitsspeicher-Allocator

GWP-ASan ist eine native Arbeitsspeicherzuweisungsfunktion, mit der Fehler nach „Use-after-free“ und „Heap-buffer-overflow“ gefunden werden können. Sie können diese Funktion 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

NNAPI 1.3 führt den neuen Operandentyp TENSOR_QUANT8_ASYMM_SIGNED ein, um das neue Quantisierungsschema von TensorFlow Lite zu unterstützen.

Darüber hinaus führt NNAPI 1.3 die folgenden neuen Vorgänge ein:

  • 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 CPU und/oder GPU gedrosselt werden, was auf unerwartete Weise Auswirkungen auf Apps haben kann. Bei Apps oder Spielen, die komplexe Grafiken, hohe Rechenleistung oder anhaltende Netzwerkaktivität beinhalten, ist die Wahrscheinlichkeit höher, dass Probleme auftreten.

Mit der NDK Thermal API in Android 11 kannst du Temperaturänderungen am Gerät beobachten und dann Maßnahmen ergreifen, um den Stromverbrauch und die Gerätetemperatur zu senken. Diese API ähnelt der Java Thermal API. Sie können sie verwenden, um Benachrichtigungen bei Ä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 (Input Method Editors, IMEs), z. B. Bildschirmtastaturen, zu verbessern. Mit diesen APIs ist es einfacher, den Inhalt Ihrer App synchron mit dem Erscheinungsbild und dem Verschwinden des IME sowie mit anderen Elementen wie den Status- und Navigationsleisten anzupassen.

Wenn ein IME angezeigt werden soll, während ein EditText im Fokus ist, 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 das EditText aufrufen. Rufen Sie view.getInsetsController().hide(Type.ime()) auf, um den IME auszublenden. Sie können prüfen, ob ein IME derzeit sichtbar ist, indem Sie view.getRootWindowInsets().isVisible(Type.ime()) aufrufen.

Um die Ansichten Ihrer App mit dem Erscheinungsbild und dem Verschwinden des IME zu synchronisieren, legen Sie einen Listener für eine Ansicht fest, indem Sie einen WindowInsetsAnimation.Callback für View.setWindowInsetsAnimationCallback() bereitstellen. Sie können diesen Listener für beliebige Ansichten festlegen. Er 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 jedem Übergang des Übergangs onProgress() aufgerufen. Nach Abschluss der Umstellung ruft der IME onEnd() auf. Während der Umstellung können Sie jederzeit WindowInsetsAnimation.getFraction() aufrufen, um den Fortschritt abzurufen.

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 Fenstereinfügungen 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;
   }
});

Rufen Sie die Methode controlWindowInsetsAnimation() des Controllers auf, um den IME oder eine andere Systemleiste zu verschieben:

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() {}
       });

Updates der ICU-Bibliotheken

Unter Android 11 wird das android.icu-Paket aktualisiert, sodass 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 bei der Unterstützung der 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 wird 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-Puffer zuweisen

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

Neue Kurse:
Neue Methoden:

Außerdem haben sich zwei Methoden in MediaCodec.Callback() geändert:

onInputBufferAvailable()
Anstatt MediaCodec.getInputBuffer() und MediaCodec.queueInputBuffer() mit dem Index aufzurufen, sollten Apps, wenn sie für die Verwendung der Block Model API konfiguriert sind, 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 Apps MediaCodec.getOutputFrame() mit dem Index verwenden, um das OutputFrame-Objekt mit weiteren Informationen und LinearBlock/HardwareBuffer-Puffern abzurufen.

Decodierung mit niedriger Latenz in MediaCodec

Unter Android 11 wurde MediaCodec optimiert, um die Decodierung mit niedriger Latenz für Spiele und andere Echtzeit-Apps zu unterstützen. Sie können prüfen, ob ein Codec die Decodierung mit niedriger Latenz unterstützt. Dazu übergeben Sie FEATURE_LowLatency an MediaCodecInfo.CodecCapabilities.isFeatureSupported().

So aktivieren oder deaktivieren Sie die Decodierung mit niedriger Latenz:

Neue AAudio-Funktion „AAudioStream_release()“

Die Funktion AAudioStream_close() gibt einen Audiostream gleichzeitig frei und schließt ihn. Das kann gefährlich sein. Wenn ein anderer Prozess versucht, nach dem Schließen auf den Stream zuzugreifen, stürzt der Prozess ab.

Die neue Funktion AAudioStream_release() gibt den Stream frei, schließt ihn aber nicht. Dadurch werden die 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 Funktionen zur Medienextraktion.

Audioaufnahme von einem USB-Gerät

Wenn eine App 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 die Option „Immer verwenden“, sodass der Nutzer die Warnung jedes Mal bestätigen und die Berechtigung erteilen muss, wenn eine App Zugriff anfordert.

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

Gleichzeitiger Mikrofonzugriff

Mit Android 11 werden den AudioRecord, MediaRecorder und AAudioStream APIs neue Methoden hinzugefügt. Mit diesen Methoden wird die Möglichkeit der gleichzeitigen Erfassung unabhängig vom ausgewählten Anwendungsfall aktiviert oder deaktiviert. Weitere Informationen finden Sie unter Audioeingabe teilen.

Ausgabeauswahl

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

Sie können nicht nur aus einer App heraus auf die Streamingoptionen zugreifen, sondern auch im Mediaplayer des Systems. So können Nutzer nahtlos zwischen Geräten wechseln, wenn sie ihr Seh- und Hörkontext ändern, z. B. beim Ansehen von Videos in der Küche oder auf einem Smartphone oder beim Abspielen von Audioinhalten zu Hause oder im Auto. Siehe Ausgabeauswahl.

Konnektivität

Verbesserungen des Wi-Fi Passpoint

Informationen zu den in Android 11 hinzugefügten Passpoint-Funktionen finden Sie unter Passpoint.

Wi-Fi Suggestion API ist erweitert

Android 11 erweitert die Wi-Fi Suggestion API um die Netzwerkverwaltungsfunktionen deiner App, darunter:

  • Anwendungen zur Konnektivitätsverwaltung können ihre eigenen Netzwerke verwalten, indem sie Anfragen zur Trennung von Verbindungen 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.

Neuerungen bei CallScreeningService

Ab Android 11 kann ein CallScreeningService Informationen zum STIR/SHAKEN-Überprüfungsstatus (Verstat) für eingehende Anrufe anfordern. Diese Informationen werden in den Anrufdetails für eingehende Anrufe bereitgestellt.

Wenn ein CallScreeningService die Berechtigung READ_CONTACTS hat, wird die App benachrichtigt, wenn Anrufe von einer Nummer in den Kontakten des Nutzers eingehen oder an diese gehen.

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

Open Mobile API-Updates

Informationen zur OMAPI-Unterstützung unter Android 11 und höher finden Sie unter Open Mobile API-Unterstützung für Leser.

Leistungsstarke VPNs

Anwendungen, die auf API-Level 30 und höher abzielen oder auf Geräten ausgeführt werden, die auf API-Ebene 29 und höher gestartet werden, können IKEv2/IPsec auf VPNs sowohl für nutzer konfigurierte als auch anwendungsbasierte VPNs anwenden.

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

Netzwerkzugriffssteuerung pro Prozess

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 PasspointConfiguration.getUniqueId() verwenden, um eine eindeutige Kennung für ein PasspointConfiguration-Objekt zu erhalten. So können 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 als Home-Anbieter entspricht, wenn der Nutzer eine SIM mit Kundencenter oder MNC installiert.

Unterstützung für GNSS-Antennen

Mit Android 11 wird die Klasse GnssAntennaInfo eingeführt. Dadurch kann deine App die zentimetergenaue Positionierung nutzen, die das globale Navigationssatellitensystem (GNSS) bieten kann.

Weitere Informationen finden Sie in der Übersicht zur Antennenkalibrierung.

Grafik

NDK-Bilddecoder

Die NDK ImageDecoder API bietet eine Standard-API für Android-C-/C++-Apps zur direkten Decodierung von Bildern. App-Entwickler müssen nicht mehr die Framework APIs (über JNI) verwenden oder Drittanbieterbibliotheken zur Bilddecodierung bündeln. Weitere Informationen finden Sie im Entwicklerleitfaden für Bilddecoder.

Frame Rate API

Android 11 bietet eine API, mit der Apps dem System die gewünschte Framerate mitteilen können, um die Probleme auf Geräten zu verringern, die mehrere Aktualisierungsraten unterstützen. Informationen zur Verwendung dieser API findest du unter Framerates.

Unterstützung mit niedriger Latenz anfordern und prüfen

Bestimmte Bildschirme können eine Nachbearbeitung von Grafiken ausführen, z. B. einige externe Bildschirme und Fernseher. Diese Nachbearbeitung verbessert die Grafiken, kann aber die Latenz erhöhen. Neuere Bildschirme, die HDMI 2.1 unterstützen, haben einen automatischen Modus mit niedriger Latenz (ALLM, auch Spielemodus genannt), der die Latenz minimiert, indem diese Nachverarbeitung deaktiviert wird. Weitere Informationen zu ALLM finden Sie in der HDMI 2.1-Spezifikation.

Ein Fenster kann anfordern, dass der automatische Modus mit niedriger Latenz verwendet wird, wenn 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.

Rufen Sie Window.setPreferMinimalPostProcessing() auf oder setzen Sie das Attribut preferMinimalPostProcessing des Fensters auf true, um die minimale Nachbearbeitung zu aktivieren oder zu deaktivieren. Nicht alle Bildschirme unterstützen eine minimale Nachverarbeitung. Wenn Sie wissen möchten, ob eine bestimmte Anzeige dies unterstützt, rufen Sie die neue Methode Display.isMinimalPostProcessingSupported() auf.

Leistungsstarke Grafik-Debug-Layer-Einschleusung

Anwendungen können jetzt externe Grafikebenen (GLES, Vulkan) in nativen Anwendungscode laden, um die gleiche Funktionalität wie eine debugfähige Anwendung bereitzustellen, ohne dass dabei der Leistungsaufwand steigt. Diese Funktion ist besonders wichtig, wenn Sie für Ihre Anwendung mit Tools wie GAPID ein Profil erstellen. Wenn Sie ein Profil für Ihre App erstellen möchten, fügen Sie das folgende meta-data-Element in die Manifest-Datei Ihrer App ein, anstatt die App 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 während einer aktiven Aufnahme stummschalten

Ab Android 11 kann Ihre App bei aktiver Nutzung der Kamera nur Vibrationen, sowohl Töne als auch Vibrationen oder keines davon mit setCameraAudioRestriction() stummschalten.

Erweiterte Kameraunterstützung im Android-Emulator

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

Unterstützung für die gleichzeitige Nutzung von mehr als einer Kamera

Unter Android 11 werden APIs hinzugefügt, um Abfragen für die gleichzeitige Verwendung von mehr als einer Kamera durchzuführen, 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 eine Set mit Kombinationen von Kamera-IDs zurück, die gleichzeitig mit garantierten Streamkombinationen streamen können, wenn sie durch denselben Anwendungsprozess konfiguriert wurden.
  • Mit isConcurrentSessionConfigurationSupported() wird abgefragt, ob Kamerageräte die entsprechenden Sitzungskonfigurationen gleichzeitig unterstützen können.

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

Ab Android 11 gilt: Wenn Sie ImageDecoder.decodeDrawable() aufrufen und ein HEIF-Bild mit einer Abfolge von Frames übergeben (z. B. einer Animation oder einer Bilderserie), gibt die Methode ein AnimatedImageDrawable-Objekt zurück, das die gesamte Bildsequenz enthält. In früheren Android-Versionen hat die Methode ein BitmapDrawable von nur einem einzelnen Frame zurückgegeben.

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

Barrierefreiheit

Updates für Entwickler von Bedienungshilfen

Wenn Sie eine benutzerdefinierte Bedienungshilfe erstellen, können Sie die folgenden Funktionen in Android 11 verwenden:

  • Die für Nutzer sichtbare Erklärung einer Bedienungshilfe ermöglicht jetzt neben Klartext auch HTML und Bilder. Dank dieser Flexibilität ist es einfacher, den Endnutzern zu erklären, was Ihr Dienst tut und wie er ihnen helfen kann.
  • Wenn Sie mit einer Beschreibung des Status eines UI-Elements arbeiten möchten, die semantisch aussagekräftiger ist als contentDescription, rufen Sie die Methode getStateDescription() auf.
  • Wenn Touchereignisse den Touch Explorer des Systems umgehen sollen, rufen Sie setTouchExplorationPassthroughRegion() auf. Wenn Sie einstellen möchten, dass Touch-Gesten den Gestendetektor des Systems umgehen, müssen Sie setGestureDetectionPassthroughRegion() aufrufen.
  • Sie können IME-Aktionen wie „Eingabetaste“ 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 des App-Prozesses

In Android 11 wird die Methode ActivityManager.getHistoricalProcessExitReasons() eingeführt, mit der die Gründe für die jüngsten Beendigungen von Prozessen angegeben werden. Apps können diese Methode verwenden, um Diagnoseinformationen zu Absturzursachen zu erfassen, z. B. ob eine Prozessbeendigung auf ANR-Fehler, Speicherprobleme oder andere Gründe zurückzuführen ist. Darüber hinaus können Sie die neue Methode setProcessStateSummary() verwenden, um benutzerdefinierte Statusinformationen für eine spätere Analyse zu speichern.

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

Weitere Informationen

Weitere Informationen finden Sie im Artikel zu neuen Android 11-Tools, um Apps privater und stabiler zu machen auf Medium.

Ressourcenladeprogramme

Mit Android 11 wird eine neue API eingeführt, mit der Apps dynamisch die Suche und das Laden von Ressourcen erweitern können. Hauptsächlich sind die neuen API-Klassen ResourcesLoader und ResourcesProvider für die Bereitstellung der neuen Funktionen 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 stellen dagegen Methoden zum Laden von Ressourcendaten aus APKs und Ressourcentabellen bereit.

Ein wichtiger Anwendungsfall für diese API ist das Laden benutzerdefinierter Assets. Sie können loadFromDirectory() verwenden, um ein ResourcesProvider zu erstellen, das die Auflösung von dateibasierten Ressourcen und Assets umleitet. Dadurch wird ein bestimmtes Verzeichnis und nicht das Anwendungs-APK durchsucht. Der Zugriff auf diese Assets erfolgt über die Methodenfamilie open() der API-Klasse AssetManager, genau wie bei den im APK gebündelten Assets.

APK-Signaturschema v4

Unter Android 11 wird jetzt APK Signature Scheme v4 unterstützt. Dieses Schema erzeugt eine neue Art von Signatur in einer separaten Datei (apk-name.apk.idsig), ist aber ansonsten v2 und v3 ähnlich. Am APK werden keine Änderungen vorgenommen. Dieses Schema unterstützt die zusätzliche ADB-APK-Installation, die die APK-Installation beschleunigt.

Dynamische Intent-Filter

Um Intents zu erhalten, muss eine App bei der Kompilierung deklarieren, welche Datentypen sie empfangen kann. Dazu muss im App-Manifest ein Intent-Filter definiert werden. Unter Android 10 und niedriger haben Apps keine Möglichkeit, ihre Intent-Filter zur Laufzeit zu ändern. Dies ist ein Problem für Virtualisierungsanwendungen (z. B. virtuelle Maschinen und Remote-Desktops), da sie nicht genau wissen, welche Software der Nutzer in ihnen installieren wird.

Mit Android 11 werden MIME-Gruppen eingeführt. Dies ist ein neues Manifestelement, mit dem Apps eine dynamische Gruppe von MIME-Typen in einem Intent-Filter deklarieren und zur Laufzeit programmatisch ändern können. Wenn Sie eine MIME-Gruppe verwenden möchten, 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, mit der die MIME-Gruppe zur Laufzeit identifiziert wird. Sie können auf den Inhalt einer MIME-Gruppe zugreifen und ihn aktualisieren. Dazu übergeben Sie ihre ID an die folgenden neuen Methoden in der API-Klasse PackageManager:

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

Verbesserungen beim automatischen Ausfüllen

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

Hinweiskennungen in AssistStructure.ViewNode

Häufig ist es nützlich, dass Autofill-Dienste einen Signatur-Hash für eine Ansicht basierend auf den Attributen der Ansicht berechnen. Der Anzeigehinweis ist eine besonders gute Eigenschaft, die bei der Berechnung eines Signatur-Hashwerts verwendet werden sollte. Der Hinweisstring kann sich jedoch je nach Sprache des Telefons ändern. Um dieses Problem zu lösen, erweitert Android 11 AssistStructure.ViewNode mit einer neuen getHintIdEntry()-Methode, 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.

Ereignisse in Datasets, die angezeigt werden

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 bereitgestellt hat, der Nutzer aber keine davon ausgewählt hat. In Android 11 meldet FillEventHistory einen neuen Ereignistyp TYPE_DATASETS_SHOWN. FillEventHistory protokolliert ein Ereignis dieses Typs immer dann, wenn der Autofill-Dienst dem Nutzer ein oder mehrere Datasets zur Verfügung stellt. Autofill-Dienste können diese Ereignisse in Verbindung mit dem vorhandenen TYPE_DATASET_SELECTED-Ereignis verwenden, um festzustellen, ob der Nutzer eine der bereitgestellten Autofill-Optionen ausgewählt hat.

IME-Integration

Auf Tastaturen und anderen IMEs können Autofill-Vorschläge jetzt inline, in einer Vorschlagsleiste oder in einer ähnlichen Oberfläche statt in einem Drop-down-Menü angezeigt werden. Zum Schutz vertraulicher Informationen wie Passwörter und Kreditkartennummern werden die Vorschläge dem Nutzer angezeigt, sind dem IME aber erst bekannt, wenn er einen auswählt. Informationen dazu, wie IMEs und Passwortmanager diese Funktion unterstützen können, finden Sie unter Autofill mit Tastaturen einbinden.

Datenfreigabe für Inhaltserfassungsdienst

Ab Android 11 kann deine App Daten mit dem Inhaltserfassungsdienst des Geräts teilen. Diese Funktion erleichtert es einem Gerät, kontextbezogene Informationen bereitzustellen, z. B. den Namen eines Titels, der gerade in der Umgebung des Nutzers läuft.

Rufen Sie die Methode shareData() für eine Instanz von ContentCaptureManager auf, um Daten aus Ihrer App für den Inhaltserfassungsdienst verfügbar zu machen. Wenn das System die Anfrage zur Datenfreigabe akzeptiert, empfängt Ihre Anwendung einen schreibgeschützten Dateideskriptor, der mit dem Inhaltserfassungsdienst geteilt werden kann.