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
aufLAYOUT_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:
- Der Konstruktor
BubbleMetadata.Builder()
ohne Parameter wurde eingestellt. Verwenden Sie stattdessen einen der beiden neuen KonstruktorenBubbleMetadata.Builder(PendingIntent, Icon)
oderBubbleMetadata.Builder(String)
. - Erstellen Sie
BubbleMetadata
über eine Verknüpfungs-ID, indem SieBubbleMetadata.Builder(String)
aufrufen. Der übergebene String muss mit der Verknüpfungs-ID übereinstimmen, die fürNotification.Builder
angegeben wurde. - Erstellen Sie Infofeldsymbole mit
Icon.createWithContentUri()
oder mit der neuen MethodecreateWithAdaptiveBitmapContentUri()
.
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:
QoS API:Die neue Quality of Service API unterstützt die Priorisierung und Aufgabenfristen in NNAPI mit den folgenden neuen Funktionen:
Speicherdomaineingabe/-ausgabe: NNAPI 1.3 unterstützt Speicherdomains als Eingabe und Ausgabe für die Ausführung. Dadurch werden unnötige Kopien derselben Daten zwischen verschiedenen Systemkomponenten entfernt, wodurch die Laufzeitleistung neuronaler Android-Netzwerke verbessert wird. Mit diesem Feature wird eine Reihe neuer NDK APIs zur Verwendung mit
ANeuralNetworksMemoryDesc
- undANeuralNetworkMemory
-Objekten hinzugefügt, darunter die folgenden Funktionen:ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
Weitere Informationen finden Sie im Beispiel zur Speicherdomain eines neuronalen Netzwerks.
Abhängigkeits-API- und Synchronisierungs-Fence-Unterstützung: NNAPI 1.3 unterstützt asynchrones Computing mit Abhängigkeiten. Dadurch wird der Aufwand beim Aufrufen kleiner verketteter Modelle erheblich reduziert. Mit dieser Funktion werden die folgenden neuen Funktionen hinzugefügt:
Steuerungsablauf:NNAPI 1.3 unterstützt einen allgemeinen Kontrollfluss mit den neuen Grafikvorgängen
ANEURALNETWORKS_IF
undANEURALNETWORKS_WHILE
, die andere Modelle als Argumente mit dem neuen OperandentypANEURALNETWORKS_MODEL
akzeptieren. Darüber hinaus werden die folgenden neuen Funktionen hinzugefügt:
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 Typjava.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:
MediaCodec.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
Außerdem haben sich zwei Methoden in MediaCodec.Callback()
geändert:
onInputBufferAvailable()
- Anstatt
MediaCodec.getInputBuffer()
undMediaCodec.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 AppsMediaCodec.getOutputFrame()
mit dem Index verwenden, um dasOutputFrame
-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:
- Legen Sie den neuen Schlüssel
KEY_LOW_LATENCY
mithilfe vonMediaCodec.configure()
auf 0 oder 1 fest. - Legen Sie den neuen Parameterschlüssel
PARAMETER_KEY_LOW_LATENCY
mithilfe vonMediaCodec.setParameters()
auf 0 oder 1 fest.
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 eineSet
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.
Bedienungshilfen
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 MethodegetStateDescription()
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 SiesetGestureDetectionPassthroughRegion()
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.
Zusätzliche Ressourcen
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.