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. Informationen zu Bereichen, in denen sich Plattformänderungen auf Ihre Apps auswirken können, finden Sie in den Änderungen am Verhalten von Android 11 für Apps, die auf Android R ausgerichtet sind und in den Änderungen am Verhalten von Android 11 für alle Apps sowie in den Änderungen beim Datenschutz.

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 Steuerelemente 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 wie gewohnt 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 Methoden DisplayCutout.getSafeInset…() geben jetzt den sicheren Einzug zurück, um Abfolgebereiche und Ausschnitte 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 ihre Benachrichtigungen nur dann als Bubbles angezeigt, wenn sie die neuen Anforderungen an Unterhaltungen erfüllen. Die Benachrichtigung muss mit einem Verknüpfungssymbol verknüpft 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.

Die Leistung von Bubbles wurde verbessert und Nutzer können Bubbles in jeder App flexibler aktivieren und deaktivieren. Für Entwickler, die den experimentellen Support 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

Damit Sie das Sicherheitsniveau für die Daten Ihrer App besser steuern können, bietet Android 11 mehrere Verbesserungen bei der biometrischen Authentifizierung. Diese Änderungen werden auch in der Jetpack-Bibliothek für biometrische Authentifizierung berücksichtigt.

Authentifizierungstypen

Mit Android 11 wird die BiometricManager.Authenticators-Schnittstelle eingeführt, mit der Sie die Authentifizierungstypen angeben können, die von Ihrer App unterstützt werden.

Verwendeten Authentifizierungstyp ermitteln

Nachdem sich der Nutzer authentifiziert hat, kannst du mithilfe von getAuthenticationType() prüfen, ob er sich mit Geräte- oder biometrischen Anmeldedaten authentifiziert hat.

Zusätzliche Unterstützung für Schlüssel mit einmaliger Verwendung

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

Eingestellte 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 Datensätze

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 Over-the-air-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, für die die CE-Schlüssel erforderlich sind, fortsetzen kann, 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.

ADB-inkrementelle 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. Wenn sie nicht unterstützt wird, wird die Standardinstallationsmethode 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 Speicherallokierungsfunktion, mit der sich Use-After-Free- und Heap-Buffer-Overflow-Fehler finden lassen. Sie können diese Funktion global oder für bestimmte Unterprozesse 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

NNAPI 1.3 führt den neuen Operandentyp TENSOR_QUANT8_ASYMM_SIGNED ein, 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. Dies 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 bei Ä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. Wenn Sie die IME ausblenden möchten, drücken Sie view.getInsetsController().hide(Type.ime()). Mit view.getRootWindowInsets().isVisible(Type.ime()) können Sie prüfen, ob eine IME derzeit sichtbar ist.

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 jedem Fortschritt 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 die 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-Standortdaten und eine Reihe von Verbesserungen bei der Internationalisierungsunterstützung 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 bieten. So kann die App den Arbeitsspeicher effizienter verwalten.

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 Apps MediaCodec.getOutputFrame() mit dem Index verwenden, um das OutputFrame-Objekt mit weiteren Informationen und LinearBlock-/HardwareBuffer-Buffers 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. Du kannst prüfen, ob ein Codec die Decodierung mit niedriger Latenz unterstützt, indem du FEATURE_LowLatency an MediaCodecInfo.CodecCapabilities.isFeatureSupported() weitergibst.

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 nach dem Schließen des Streams versucht, darauf zuzugreifen, stürzt er 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 du AAudioStream_close() aufrufst.

MediaParser API

MediaParser ist eine neue Low-Level-API für die 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. Die Option „Immer verwenden“ wird vom System ignoriert. Der Nutzer muss die Warnung jedes Mal bestätigen und die Berechtigung erteilen, wenn eine App den Zugriff anfordert.

Um dieses Verhalten zu vermeiden, sollte Ihre 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 finden Sie unter Passpoint.

Die WLAN-Vorschlags-API wurde erweitert

In Android 11 wurde die Wi‑Fi Suggestion API erweitert, um die Netzwerkverwaltungsfunktionen Ihrer 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 bei eingehenden Anrufen als Anrufdetails angezeigt.

Wenn eine CallScreeningService die Berechtigung READ_CONTACTS hat, wird die App benachrichtigt, wenn eingehende Anrufe von oder ausgehende Anrufe an eine Nummer in den Kontakten des Nutzers eingehen.

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

Updates zur Open Mobile API

Informationen zur OMAPI-Unterstützung unter Android 11 und höher finden Sie unter Unterstützung für OMAPI-Lesegeräte.

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, mehrere Profile mit demselben FQDN zu installieren, der mit dem Netzwerk des Heimanbieters übereinstimmt, wenn der Nutzer eine SIM-Karte mit MCC oder MNC einlegt.

Unterstützung für GNSS-Antennen

Mit Android 11 wird die Klasse GnssAntennaInfo eingeführt. Damit kann Ihre App die Zentimetergenauigkeit des Global Navigation Satellite System (GNSS) besser nutzen.

Weitere Informationen finden Sie in der Anleitung zur Antennenkalibrierung.

Grafik

NDK-Bilddecoder

Die NDK ImageDecoder API ist 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 Bilddekoder.

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 bei niedriger 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, geben Sie Window.setPreferMinimalPostProcessing() ein oder legen Sie das Attribut preferMinimalPostProcessing des Fensters auf true fest. Nicht alle Displays unterstützen die minimale Nachbearbeitung. Wenn Sie herausfinden möchten, ob ein bestimmtes Display 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 Ihre Anwendung mit Tools wie GAPID profilieren. 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 von 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, ob Kamerageräte die entsprechenden Sitzungskonfigurationen gleichzeitig 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 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 Nur-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 anfordern 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. Mit dieser Methode können Apps Informationen zur Absturzdiagnose erfassen, z. B. ob ein Prozess aufgrund von ANRs, Speicherproblemen oder anderen Gründen beendet wurde. 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 App-Prozesses 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 gibt beispielsweise an, 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 hauptsächlich für die Bereitstellung der neuen Funktionen verantwortlich. Zusammen ermöglichen sie die Bereitstellung zusätzlicher Ressourcen und Assets oder die Änderung der Werte vorhandener Ressourcen und Assets.

ResourcesLoader-Objekte sind Container, die ResourcesProvider-Objekte an die Resources-Instanz einer App liefern. 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 erzeugt eine neue Art von Signatur in einer separaten Datei (apk-name.apk.idsig), ist aber ansonsten mit Version 2 und Version 3 identisch. Es werden keine Änderungen am APK vorgenommen. Dieses Schema unterstützt die inkrementelle APK-Installation über ADB, wodurch die APK-Installation beschleunigt wird.

Dynamische Intent-Filter

Damit eine App Intents empfangen kann, muss sie zur Kompilierungszeit angeben, welche Datentypen sie empfangen kann. Dazu muss im App-Manifest ein Intent-Filter definiert werden. 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 erkennen, 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 ein Ereignis dieser Art, wenn der Autofill-Dienst dem Nutzer einen oder mehrere Datensätze präsentiert. 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 Eingabemethoden können Autofill-Vorschläge jetzt Inline in einem Vorschlagsstreifen oder einer ähnlichen Benutzeroberflä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 den Dienst zur Erfassung von Inhalten

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 App einen Dateideskriptor, der nur zum Schreiben dient und für den Dienst zur Erfassung von Inhalten freigegeben werden kann.