Funktionen und APIs – Übersicht

Android 11 bietet tolle neue Funktionen und APIs für Entwickler. In den folgenden Abschnitten erfahren Sie mehr über Funktionen für Ihre Apps und erhalten einen Einstieg in die zugehörigen APIs.

Eine detaillierte Liste der neuen, geänderten und entfernten APIs finden Sie im API-Diff-Bericht. Weitere Informationen zu neuen APIs finden Sie in der Android API-Referenz. Neue APIs sind hervorgehoben. Wenn du wissen möchtest, in welchen Bereichen sich Plattformänderungen auf deine Apps auswirken können, sieh dir die Änderungen des Android 11-Verhaltens 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

Unter Android 11 wurde die Darstellung der Mediensteuerung aktualisiert. Die Mediensteuerelemente werden in der Nähe der Schnelleinstellungen angezeigt. Sitzungen aus mehreren Apps werden in einem Karussell angeordnet, das wischbar ist. Es enthält Streams, die lokal auf dem Smartphone wiedergegeben werden, Remote-Streams, z. B. solche, die auf externen Geräten erkannt wurden, oder Übertragungssitzungen sowie vorherige, fortsetzbare Sitzungen in der Reihenfolge, in der sie zuletzt wiedergegeben wurden.

Nutzer können vorherige Sitzungen über das Karussell neu starten, ohne die App starten zu müssen. Wenn die Wiedergabe beginnt, interagiert der Nutzer auf die übliche Weise mit den Mediensteuerungen.

Weitere Informationen finden Sie unter Mediensteuerung.

Bildschirme

Bessere Unterstützung für abfolgebasierte Anzeigen

Android 11 bietet mehrere APIs zur Unterstützung von Bildschirmen im Vollbildformat, die bis zum Rand des Geräts reichen. Diese Displays werden als Variante von Displays mit 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 abfolgebasierten Bereich:

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

  • Legen Sie das Fensterlayoutattribut layoutInDisplayCutoutMode auf LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS fest, damit sich das Fenster an allen Rändern des Bildschirms in die Aussparung und die abfolgeartigen Bereiche erstrecken kann. Achten Sie darauf, dass sich in den Bereichen für den Ausschnitt oder die Abfolge keine wichtigen Inhalte befinden.

Scharnierwinkelsensor und faltbare Geräte

Mit Android 11 können Apps, die auf Geräten mit Scharnier-basierten Bildschirmkonfigurationen ausgeführt werden, den Scharnierwinkel bestimmen. Dazu wird ein neuer Sensor mit TYPE_HINGE_ANGLE und ein neuer SensorEvent bereitgestellt, der den Scharnierwinkel überwachen und eine Messung in Grad zwischen zwei integralen Teilen des Geräts liefern kann. Anhand dieser Rohmesswerte können Sie detaillierte Animationen ausführen, während der Nutzer das Gerät bedient.

Weitere Informationen finden Sie unter Foldables.

Unterhaltungen

Verbesserungen bei Unterhaltungen

In Android 11 wurden einige Verbesserungen an der Verarbeitung von Unterhaltungen vorgenommen. Unterhaltungen sind eine bidirektionale Kommunikation in Echtzeit zwischen zwei oder mehr Personen. Diese Unterhaltungen werden besonders hervorgehoben und Nutzer haben mehrere neue Möglichkeiten, mit ihnen zu interagieren.

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

Chat-Bubbles

Bubbles sind jetzt für Entwickler verfügbar, um Unterhaltungen im gesamten System zu präsentieren. Bubbles war in Android 10 eine experimentelle Funktion, die über eine Entwickleroption aktiviert wurde. In Android 11 ist das 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 die Benachrichtigung immer im Dokument-UI-Modus gestartet werden soll, damit sie als Bubble angezeigt wird. Ab Android 11 müssen Sie diese Einstellung nicht mehr explizit vornehmen. Wenn die Benachrichtigung als Bubble angezeigt wird, wird sie von der Plattform automatisch so festgelegt, dass sie immer im Modus der Dokumentbenutzeroberfläche 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-Anzeige

Informationen zum Anzeigen von 5G-Symbolen auf den Geräten der Nutzer finden Sie unter Nutzer darüber informieren, dass sie 5G nutzen.

Datenschutz

Android 11 enthält eine große Anzahl von Änderungen und Einschränkungen, um den Datenschutz für Nutzer zu verbessern. Weitere Informationen finden Sie auf der Seite Datenschutz.

Sicherheit

Aktualisierungen bei der biometrischen Authentifizierung

Android 11 bietet mehrere Verbesserungen an der biometrischen Authentifizierung, um Ihnen die Kontrolle über die Sicherheit der App-Daten zu erleichtern. 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.

Verwendeten Authentifizierungstyp ermitteln

Nachdem sich der Nutzer authentifiziert hat, kannst du mit getAuthenticationType() prüfen, ob er sich mit Geräte- 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 Einmalschlüsseln.

Verworfene Methoden

Unter Android 11 werden die folgenden Methoden eingestellt:

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

Sichere Freigabe großer Datasets

In einigen Fällen, z. B. bei Anwendungen für maschinelles Lernen oder Medienwiedergabe, kann es sinnvoll sein, denselben großen Datensatz für mehrere Apps zu verwenden. In früheren Android-Versionen mussten Ihre App und eine andere App jeweils eine separate Kopie desselben Datensatzes herunterladen.

Um die Datenredundanz sowohl über das Netzwerk als auch auf dem Laufwerk zu reduzieren, können diese großen Datensätze in Android 11 mithilfe von freigegebenen Daten-Blobs im Gerät im Cache gespeichert werden. Weitere Informationen zum Freigeben von Datasets finden Sie im Detailleitfaden zum Freigeben großer Datasets.

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

Nachdem das Gerät ein Over-the-air-Update abgeschlossen und neu gestartet hat, sind die Anmeldedaten verschlüsselten Schlüssel (CE), die im anmeldedatengeschützten Speicher abgelegt sind, sofort für Dateibasierte Verschlüsselung (File-Based Encryption, FBE)-Vorgänge verfügbar. Das bedeutet, dass Ihre App nach einem Over-the-air-Update Funktionen wieder aufnehmen 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 Ihrer App über Ihre Workstation mit Android Debug Bridge (adb). So können Sie Ihre debuggbare App beispielsweise auf mehreren Remote-Geräten bereitstellen, ohne Ihr Gerät physisch über USB zu verbinden und sich mit häufigen USB-Verbindungsproblemen wie der Treiberinstallation auseinandersetzen zu müssen. 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 sehr lange dauern, auch wenn nur eine kleine Änderung an einer App vorgenommen wird. Die inkrementelle APK-Installation mit ADB (Android Debug Bridge) beschleunigt diesen Vorgang, indem genügend APK installiert wird, um die App zu starten, während die verbleibenden Daten im Hintergrund gestreamt werden. adb install verwendet diese Funktion automatisch, wenn sie vom Gerät unterstützt wird und Sie die neuesten SDK-Plattformtools installiert haben. Wird sie nicht unterstützt, wird die Standardinstallationsmethode automatisch verwendet.

Verwenden Sie den folgenden adb-Befehl, um die Funktion zu verwenden. Wenn das Gerät die inkrementelle Installation nicht unterstützt, schlägt der Befehl fehl und eine ausführliche Erklärung wird ausgegeben.

adb install --incremental

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

Fehlererkennung mit dem nativen Speicherallokator

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 diese Funktion global oder für bestimmte Teilprozesse Ihrer App aktivieren. Weitere Informationen finden Sie im Leitfaden für GWP-ASan.

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 in NNAPI 1.3 die folgenden neuen Vorgänge eingeführt:

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

Neue ML-Steuerungen

NNAPI 1.3 führt neue Steuerelemente ein, die für eine reibungslose Ausführung von Machine Learning sorgen:

NDK Thermal API

Wenn Geräte zu warm werden, wird die CPU und/oder GPU möglicherweise gedrosselt. Das kann sich auf unerwartete Weise auf Apps auswirken. Bei Apps oder Spielen mit komplexen Grafiken, hoher Rechenleistung oder anhaltender Netzwerkaktivität treten häufiger Probleme auf.

Verwenden Sie die NDK Thermal API in Android 11, um Temperaturänderungen auf dem Gerät zu überwachen und dann Maßnahmen zu ergreifen, um den Energieverbrauch zu senken und die Gerätetemperatur zu kühlen. 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

In Android 11 werden neue APIs eingeführt, um die Übergänge zwischen Eingabemethodeneditoren (IMEs) wie Bildschirmtastaturen zu verbessern. Mit diesen APIs können Sie die Inhalte Ihrer App leichter so anpassen, dass sie mit dem Ein- und Ausblenden der IME und anderen Elementen wie Status- und Navigationsleisten synchronisiert sind.

Wenn eine IME angezeigt werden soll, während der Fokus auf einer EditText liegt, drücken Sie view.getInsetsController().show(Type.ime()). Sie können diese Methode für jede Ansicht in derselben Hierarchie wie die 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. Ob eine IME derzeit sichtbar ist, können Sie durch Eingabe von view.getRootWindowInsets().isVisible(Type.ime()) prüfen.

Wenn Sie die Ansichten Ihrer App mit dem Ein- und Ausblenden der IME synchronisieren möchten, legen Sie einen Listener für eine Ansicht fest, indem Sie View.setWindowInsetsAnimationCallback() mit WindowInsetsAnimation.Callback verknüpfen. Sie können diesen Listener auf jeder Ansicht festlegen, es muss sich nicht um eine EditText handeln. Die IME ruft die Methode onPrepare() Ihres Listeners auf und dann zu Beginn der Umstellung die Methode onStart(). Anschließend wird bei jeder Fortsetzung des Übergangs onProgress() aufgerufen. Nach Abschluss der Umstellung ruft die IME onEnd() auf. Sie können jederzeit den Fortschritt der Umstellung prüfen, indem Sie WindowInsetsAnimation.getFraction() aufrufen.

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

Updates für die ICU-Bibliotheken

In Android 11 wird das android.icu-Paket auf Version 66 der ICU-Bibliothek aktualisiert, während in Android 10 Version 63 verwendet wurde. 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, die 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 neue MediaCodec APIs, die Apps mehr Kontrolle bei der Zuweisung von Eingabe- und Ausgabepuffern geben. So kann der Arbeitsspeicher Ihrer App effizienter verwaltet werden.

Neue Kurse:
Neue Methoden:

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

onInputBufferAvailable()
Wenn die Block Model API verwendet wird, sollten Apps anstelle von MediaCodec.getInputBuffer() und MediaCodec.queueInputBuffer() mit dem Index MediaCodec.getQueueRequest mit dem Index verwenden und dem Steckplatz einen LinearBlock/HardwareBuffer zuweisen.
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

Android 11 verbessert MediaCodec, um die Dekodierung 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. Übergeben Sie dazu FEATURE_LowLatency an MediaCodecInfo.CodecCapabilities.isFeatureSupported().

So aktivierst oder deaktivierst du die Dekodierung 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, 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 die Ressourcen freigegeben und der Stream bleibt in einem bekannten Zustand. 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 Medienextraktionsfunktionen.

Audioaufnahme von einem USB-Gerät

Wenn eine Anwendung ohne die Berechtigung RECORD_AUDIO über UsbManager den direkten Zugriff auf ein USB-Audiogerät mit Audioaufnahmefunktion (z. B. ein USB-Headset) anfordert, 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

Android 11 fügt den APIs AudioRecord, MediaRecorder und AAudioStream neue Methoden hinzu. Mit diesen Methoden können Sie die gleichzeitige Erfassung unabhängig vom ausgewählten Anwendungsfall aktivieren und deaktivieren. Weitere Informationen finden Sie unter Audioeingabe teilen.

Ausgabeauswahl

Unter Android 11 wird ein neues Verhalten für Apps implementiert, die die Cast- und MediaRouter APIs verwenden.

Sie können nicht nur über eine App auf die Streamingoptionen zugreifen, sondern auch über den Systemmediaplayer. So können Nutzer nahtlos zwischen Geräten wechseln, wenn sie den Wiedergabe- und Wiedergabekontext ändern, z. B. wenn sie sich ein Video in der Küche oder auf dem Smartphone ansehen oder sich Audioinhalte zu Hause oder im Auto anhören. Weitere Informationen zum Ausgabe-Schalter

Konnektivität

Verbesserungen bei Wi‑Fi Passpoint

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

Die WLAN-Vorschlags-API wurde erweitert

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

  • Apps zur Verbindungsverwaltung können ihre eigenen Netzwerke verwalten, indem sie Anfragen zum Trennen von Verbindungen zulassen.
  • Passpoint-Netzwerke sind in die Suggestion API eingebunden und können Nutzern vorgeschlagen werden.
  • Mit Analytics APIs können Sie Informationen zur Qualität Ihrer Netzwerke abrufen.

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 Spoofing der Anrufer-ID verhindern.

Updates zur Open Mobile API

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

Leistungsstarke VPNs

Bei Apps, die auf API-Level 30 oder höher ausgerichtet sind oder auf Geräten ausgeführt werden, die mit API-Level 29 oder höher gestartet wurden, kann IKEv2/IPsec auf VPNs angewendet werden, sowohl auf vom Nutzer konfigurierte als auch auf App-basierte VPNs.

Die VPNs werden nativ im Betriebssystem ausgeführt, wodurch der Code zum Herstellen von IKEv2-/IPsec-VPN-Verbindungen in einer App vereinfacht wird.

Netzwerkzugriffssteuerung pro Prozess

Informationen zum Aktivieren des Netzwerkzugriffs pro Prozess 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. 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 Länder- und Netzwerkcode des Mobilgeräts (Mobile Country Code, MCC) und Mobile Network Code (MNC) in seinem Netzwerk einsetzt, 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 einbinden. Weitere Informationen finden Sie im Entwicklerleitfaden für Bilddecoder.

Frame Rate API

Android 11 bietet eine API, mit der Apps das System über die gewünschte Framerate informieren können, um Ruckler auf Geräten zu reduzieren, die mehrere Bildwiederholraten unterstützen. Informationen zur Verwendung dieser API findest du im Leitfaden zur Framerate.

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

Bestimmte Displays können eine Grafik-Nachbearbeitung durchführen, z. B. einige externe Displays und Fernseher. Diese Nachbearbeitung verbessert die Grafik, kann aber die Latenz erhöhen. Neuere Displays, die HDMI 2.1 unterstützen, haben einen automatischen Modus mit niedriger Latenz (ALLM, auch als Spielmodus bezeichnet), der die Latenz minimiert, indem diese Nachbearbeitung 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, sofern verfügbar. ALLM ist besonders nützlich für Anwendungen wie Spiele und Videokonferenzen, bei denen eine geringe Latenz wichtiger ist als die bestmögliche Grafik.

Wenn Sie die minimale Nachbearbeitung 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 nativen Anwendungscode laden, um dieselben Funktionen wie eine debuggbare App bereitzustellen, ohne den Leistungsoverhead zu verursachen. Diese Funktion ist besonders wichtig, wenn Sie ein Profil für Ihre Anwendung mit Tools wie GAPID erstellen. Wenn Sie Ihre App profilieren möchten, fügen Sie das folgende Metadatenelement in die Manifestdatei Ihrer App ein, anstatt die Anwendung debugbar 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 der aktiven Aufnahme stummschalten

Ab Android 11 kann Ihre App bei aktiver Nutzung der Kamera über setCameraAudioRestriction() nur Vibrationen, sowohl Töne als auch Vibrationen oder gar keine Töne und Vibrationen stummschalten.

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

Android 11 bietet APIs, mit denen die Unterstützung für die gleichzeitige Verwendung mehrerer Kameras abgefragt werden kann, einschließlich einer Front- und einer Rückkamera.

So prüfen Sie, ob das Gerät, auf dem Ihre App ausgeführt wird, unterstützt wird:

  • getConcurrentCameraIds() gibt eine Set von Kombinationen von Kamera-IDs zurück, die gleichzeitig mit garantierten Streamkombinationen gestreamt werden können, wenn sie vom selben Anwendungsvorgang konfiguriert werden.
  • isConcurrentSessionConfigurationSupported() fragt ab, ob Kamerageräte gleichzeitig die entsprechenden Sitzungskonfigurationen unterstützen können.

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

Wenn Sie ab Android 11 ImageDecoder.decodeDrawable() aufrufen und ein HEIF-Bild mit einer Sequenz von Frames übergeben (z. B. eine Animation oder ein Serienbild), gibt die Methode eine AnimatedImageDrawable zurück, die die gesamte Bildsequenz enthält. In früheren Android-Versionen gab die Methode nur einen BitmapDrawable für einen einzelnen Frame zurück.

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.

Bedienungshilfen

Updates für Entwickler von Bedienungshilfen

Wenn Sie einen benutzerdefinierten Dienst zur Barrierefreiheit erstellen, können Sie in Android 11 die folgenden Funktionen verwenden:

  • Die für Nutzer sichtbare Erklärung eines Bedienungshilfendienstes kann jetzt neben reinem Text auch HTML und Bilder enthalten. Diese Flexibilität erleichtert es, 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 Sie möchten, dass Touch-Ereignisse den Touch Explorer des Systems umgehen, rufen Sie setTouchExplorationPassthroughRegion() auf. Wenn Sie möchten, dass Touch-Gesten den Touch-Gesten-Erkennungsmechanismus des Systems umgehen, rufen Sie setGestureDetectionPassthroughRegion() auf.
  • Sie können IME-Aktionen wie „Eingabetaste“ und „Weiter“ sowie Screenshots von Fenstern anfordern, für die 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 Beendigung von Prozessen in letzter Zeit gemeldet werden. 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() benutzerdefinierte Statusinformationen zur späteren Analyse speichern.

Die Methode getHistoricalProcessExitReasons() gibt Instanzen der Klasse ApplicationExitInfo zurück, die Informationen zum Beenden eines Anwendungsprozesses enthält. Wenn Sie getReason() auf einer Instanz dieser Klasse aufrufen, können Sie ermitteln, warum der Prozess Ihrer App beendet wurde. Ein Rückgabewert von REASON_CRASH bedeutet beispielsweise, dass in Ihrer App eine nicht verarbeitete Ausnahme aufgetreten ist. Wenn Ihre App für Beendigungsereignisse Eindeutigkeit gewährleisten muss, kann sie eine appspezifische Kennung wie einen Hashwert basierend auf dem Zeitstempel aus der Methode getTimestamp() verwenden.

Weitere Informationen

Weitere Informationen finden Sie im Artikel Neue Android 11-Tools für mehr Datenschutz und Stabilität bei Apps auf Medium.

Ressourcen-Ladeprogramme

Mit Android 11 wird eine neue API eingeführt, mit der Apps die Suche und das Laden von Ressourcen dynamisch erweitern können. 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 bieten wiederum Methoden zum Laden von Ressourcendaten aus APKs und Ressourcentabellen.

Einer der wichtigsten Anwendungsfälle für diese API ist das Laden benutzerdefinierter Assets. Mit loadFromDirectory() können Sie einen ResourcesProvider erstellen, der die Auflösung von dateibasierten Ressourcen und Assets umleitet, sodass in einem bestimmten Verzeichnis statt in der APK der Anwendung gesucht wird. Sie können auf diese Assets wie bei im APK gebündelten Assets über die open()-Methodenfamilie der API-Klasse AssetManager zugreifen.

APK-Signaturschema v4

Android 11 unterstützt das APK-Signaturschema 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. Unter Android 10 und niedriger können Apps ihre Intent-Filter nicht zur Laufzeit ändern. Dies ist ein Problem für Virtualisierungsanwendungen wie virtuelle Maschinen und Remote-Desktops, da nicht genau bekannt ist, welche Software der Nutzer darin installieren wird.

In Android 11 werden MIME-Gruppen eingeführt, ein neues Manifest-Element, mit dem eine App eine dynamische Reihe von MIME-Typen in einem Intent-Filter angeben und diese programmatisch zur Laufzeit ändern kann. Wenn Sie eine MIME-Gruppe verwenden möchten, fügen Sie Ihrem App-Manifest ein Datenelement mit dem neuen android:mimeGroup-Attribut hinzu:

<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 ihn aktualisieren, indem Sie die ID an die folgenden neuen Methoden in der PackageManager API-Klasse übergeben:

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

Verbesserungen bei Autofill

Android 11 bietet Verbesserungen für Autofill-Dienste.

Hinweis-IDs in AssistStructure.ViewNode

Für Autofill-Dienste ist es oft hilfreich, einen Signatur-Hash für eine Ansicht basierend auf den Eigenschaften der Ansicht zu berechnen. Der Ansichtshinweis ist eine besonders gute Eigenschaft, die bei der Berechnung eines Signatur-Hashes berücksichtigt werden sollte. Der Hinweisstring kann sich jedoch je nach Sprache des Smartphones ändern. Um dieses Problem zu lösen, wird AssistStructure.ViewNode in Android 11 um die neue Methode getHintIdEntry() erweitert, die die Ressourcen-ID für den Hinweistext einer Ansicht zurückgibt. Diese Methode liefert einen lokal unabhängigen Wert, mit dem Sie Signatur-Hashes berechnen können.

Datensätze, für die Ereignisse angezeigt wurden

Damit Autofill-Dienste ihre Vorschläge verbessern können, bietet Android 11 eine Möglichkeit, Fälle zu identifizieren, in denen ein Autofill-Dienst Datensätze präsentiert hat, die der Nutzer jedoch nicht ausgewählt hat. Unter Android 11 wird mit FillEventHistory ein neuer Ereignistyp TYPE_DATASETS_SHOWN erfasst. 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 zu ermitteln, ob der Nutzer eine der angebotenen 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. Zum Schutz sensibler Daten wie Passwörtern und Kreditkartennummern werden die Vorschläge dem Nutzer angezeigt, sind aber der IME erst bekannt, wenn der Nutzer einen davon auswählt. 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 Ihre App Daten mit dem Dienst zum Erfassen von Inhalten des Geräts teilen. Mit dieser Funktion kann ein Gerät Kontextinformationen leichter bereitstellen, z. B. den Namen eines Songs, der gerade in der Umgebung des Nutzers abgespielt wird.

Wenn Sie Daten aus Ihrer App für den Dienst zur Inhaltserfassung verfügbar machen möchten, rufen Sie die Methode shareData() auf einer 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.