Android 11 bietet Entwicklern viele neue Funktionen und APIs. In den folgenden Abschnitten erfahren Sie mehr über Funktionen für Ihre Apps und wie Sie die zugehörigen APIs verwenden.
Eine detaillierte Liste der neuen, geänderten und entfernten APIs finden Sie im API-Vergleichsbericht. Details zu neuen APIs finden Sie in der Android-API-Referenz. Neue APIs sind zur besseren Sichtbarkeit hervorgehoben. Informationen zu Bereichen, in denen sich Plattformänderungen auf Ihre Apps auswirken können, finden Sie unter Verhaltensänderungen in Android 11 für Apps, die auf Android R ausgerichtet sind und für alle Apps sowie unter Datenschutzänderungen.
Neue Funktionen
Gerätesteuerung
Android 11 enthält eine neue ControlsProviderService
API, mit der Sie Steuerelemente für verbundene externe Geräte bereitstellen können. Diese Einstellungen werden im Android-Ein/Aus-Menü unter Gerätesteuerung angezeigt. Weitere Informationen finden Sie unter Externe Geräte steuern.
Mediensteuerung
In Android 11 wurde die Darstellung der Mediensteuerung aktualisiert. Die Mediensteuerung wird in der Nähe der Schnelleinstellungen angezeigt. Sitzungen aus mehreren Apps werden in einem wischbaren Karussell angeordnet. Dieses enthält Streams, die lokal auf dem Smartphone wiedergegeben werden, Remote-Streams, z. B. solche, die auf externen Geräten erkannt wurden, oder Cast-Sitzungen sowie frühere, 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, interagieren sie wie gewohnt mit den Media-Steuerelementen.
Weitere Informationen finden Sie unter Mediensteuerelemente.
Bildschirme
Bessere Unterstützung von Wasserfallanzeigen
Android 11 bietet mehrere APIs zur Unterstützung von Waterfall-Displays, die sich um die Kante des Geräts wickeln. Diese Displays werden als Variante von Displays mit Displayausschnitten behandelt. Die vorhandenen Methoden DisplayCutout
.getSafeInset…()
geben jetzt den sicheren Inset zurück, um Wasserfallbereiche und Ausschnitte zu vermeiden.
So rendern Sie Ihre App-Inhalte im Wasserfallbereich:
Rufen Sie
DisplayCutout.getWaterfallInsets()
auf, um die genauen Abmessungen des Wasserfall-Insets zu erhalten.Legen Sie das Attribut für das Fensterlayout
layoutInDisplayCutoutMode
aufLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
fest, damit sich das Fenster an allen Rändern des Bildschirms in die Bereiche mit Aussparung und Wasserfall erstrecken kann. Achten Sie darauf, dass sich keine wichtigen Inhalte im Ausschnitt oder im Wasserfallbereich befinden.
Scharnierwinkelsensor und faltbare Geräte
Mit Android 11 können Apps, die auf Geräten mit Displays mit Scharnier ausgeführt werden, den Winkel des Scharniers ermitteln. Dazu wird ein neuer Sensor mit TYPE_HINGE_ANGLE
und ein neuer SensorEvent
bereitgestellt, mit dem der Scharnierwinkel überwacht werden kann. Der Winkel wird in Grad zwischen zwei integralen Teilen des Geräts gemessen. Mit diesen Rohmessungen 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 wurde die Art und Weise, wie Unterhaltungen gehandhabt werden, in vielerlei Hinsicht verbessert. Unterhaltungen sind bidirektionale Echtzeitkommunikationen 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 dazu, 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. Blasen waren 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 Blasen angezeigt, wenn sie die neuen Anforderungen für Unterhaltungen erfüllen. Die Benachrichtigung muss mit einer Verknüpfung verknüpft sein.
Vor Android 11 mussten Sie explizit angeben, dass eine Benachrichtigung immer im Dokument-UI-Modus gestartet werden sollte, wenn sie als Blase angezeigt werden sollte. Ab Android 11 müssen Sie diese Einstellung nicht mehr explizit vornehmen. Wenn die Benachrichtigung als Blase angezeigt wird, legt die Plattform automatisch fest, dass die Benachrichtigung immer im Dokument-UI-Modus gestartet wird.
Die Leistung von Blasen wurde in vielerlei Hinsicht verbessert. Außerdem haben Nutzer mehr Flexibilität beim Aktivieren und Deaktivieren von Blasen für jede App. Für Entwickler, die experimentelle Unterstützung implementiert haben, gibt es einige Änderungen an den APIs in Android 11:
- Der Konstruktor
BubbleMetadata.Builder()
ohne Parameter ist veraltet. Verwenden Sie stattdessen einen der beiden neuen KonstruktorenBubbleMetadata.Builder(PendingIntent, Icon)
oderBubbleMetadata.Builder(String)
. - Erstellen Sie
BubbleMetadata
aus einer Verknüpfungs-ID, indem SieBubbleMetadata.Builder(String)
aufrufen. Der übergebene String muss mit der Verknüpfungs-ID übereinstimmen, die anNotification.Builder
übergeben wurde. - Erstellen Sie Blasen-Symbole mit
Icon.createWithContentUri()
oder mit der neuen MethodecreateWithAdaptiveBitmapContentUri()
.
Visuelle 5G-Indikatoren
Informationen zum Anzeigen von 5G-Symbolen auf den Geräten der Nutzer finden Sie unter Nutzer darüber informieren, dass sie 5G verwenden.
Datenschutz
In Android 11 wurden zahlreiche Änderungen und Einschränkungen eingeführt, um den Datenschutz zu verbessern. Weitere Informationen finden Sie auf der Seite Datenschutz.
Sicherheit
Aktualisierungen der biometrischen Authentifizierung
Android 11 bietet mehrere Verbesserungen bei der biometrischen Authentifizierung, damit Sie das Sicherheitsniveau für die Daten Ihrer App besser steuern können. Diese Änderungen werden auch in der Jetpack Biometric-Bibliothek angezeigt.
Authentifizierungstypen
In Android 11 wird die Schnittstelle BiometricManager.Authenticators
eingeführt, mit der Sie die von Ihrer App unterstützten Authentifizierungstypen deklarieren können.
Verwendeten Authentifizierungstyp ermitteln
Nachdem sich der Nutzer authentifiziert hat, können Sie prüfen, ob er sich mit einer Geräteberechtigung oder einer biometrischen Berechtigung authentifiziert hat, indem Sie getAuthenticationType()
aufrufen.
Zusätzliche Unterstützung für Auth-per-Use-Schlüssel
Android 11 bietet mehr Unterstützung für die Authentifizierung mit Auth-per-Use-Schlüsseln.
Eingestellte Methoden
In Android 11 sind die folgenden Methoden nicht mehr verfügbar:
- Die Methode
setDeviceCredentialAllowed()
. - Die Methode
setUserAuthenticationValidityDurationSeconds()
. - Die überladene Version von
canAuthenticate()
, die keine Argumente akzeptiert.
Sichere Freigabe großer Datasets
In einigen Situationen, z. B. bei maschinellem Lernen oder der Medienwiedergabe, möchte Ihre App möglicherweise denselben großen Datensatz wie eine andere App verwenden. In früheren Android-Versionen mussten Ihre App und eine andere App jeweils eine separate Kopie desselben Datensatzes herunterladen.
Um die Datenredundanz sowohl im Netzwerk als auch auf der Festplatte zu verringern, können diese großen Datasets in Android 11 mithilfe von gemeinsamen Daten-Blobs auf dem Gerät zwischengespeichert werden. Weitere Informationen zum Freigeben von Datasets finden Sie im ausführlichen Leitfaden zum Freigeben 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 hat, sind die Credential Encrypted-Schlüssel (CE), die im credential-geschützten Speicher abgelegt sind, sofort für File-Based Encryption (FBE)-Vorgänge verfügbar. Das bedeutet, dass Ihre App nach einem OTA-Update Vorgänge, 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
Unter Android 11 können Sie Ihre App drahtlos über Android Debug Bridge (adb) von Ihrer Workstation aus bereitstellen und debuggen. So können Sie Ihre debugfähige App beispielsweise auf mehreren Remote-Geräten bereitstellen, ohne Ihr Gerät physisch über USB verbinden zu müssen 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 APK-Installation über ADB
Die Installation großer APKs (ab 2 GB) auf einem Gerät kann lange dauern, auch wenn nur eine kleine Änderung an einer App vorgenommen wird. Die inkrementelle APK-Installation über ADB (Android Debug Bridge) beschleunigt diesen Vorgang, indem nur so viel des APK installiert wird, dass die App gestartet werden kann, 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 Platform-Tools installiert haben. Wenn sie nicht unterstützt wird, wird die Standardinstallationsmethode verwendet.
Verwenden Sie den folgenden adb-Befehl, um die Funktion zu nutzen. Wenn das Gerät die inkrementelle Installation nicht unterstützt, schlägt der Befehl fehl und es wird eine ausführliche Erklärung ausgegeben.
adb install --incremental
Bevor Sie eine inkrementelle APK-Installation über ADB ausführen, müssen Sie Ihr APK signieren und eine APK-Signaturschema v4-Datei erstellen. Die Signaturdatei für Version 4 muss sich neben dem APK befinden, damit dieses Feature funktioniert.
Fehlererkennung mit dem nativen Arbeitsspeicher-Allocator
GWP-ASan ist eine Funktion für die native Speicherzuweisung, 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 GWP-ASan-Leitfaden.
Neural Networks API 1.3
In Android 11 wurde die Neural Networks API (NNAPI) erweitert und verbessert.
Neue Vorgänge
Mit NNAPI 1.3 wird ein neuer 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-Steuerelemente
NNAPI 1.3 bietet neue Steuerelemente, die für einen reibungslosen Ablauf von Machine-Learning-Prozessen sorgen:
QoS API:Die neue Quality of Service API unterstützt Priorisierung und Aufgabenfristen in NNAPI mit den folgenden neuen Funktionen:
Ein-/Ausgabe von Speicherbereichen:NNAPI 1.3 unterstützt Speicherbereiche als Ein- und Ausgabe für die Ausführung. Dadurch werden unnötige Kopien derselben Daten zwischen verschiedenen Systemkomponenten entfernt, was die Laufzeitleistung von neuronalen Android-Netzwerken verbessert. Mit dieser Funktion werden eine Reihe neuer NDK-APIs für die 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 für die Speicherdomein des neuronalen Netzwerks.
Unterstützung für Dependency API und Synchronisationsbarriere:NNAPI 1.3 unterstützt asynchrone Berechnungen mit Abhängigkeiten, wodurch der Aufwand beim Aufrufen kleiner verketteter Modelle erheblich reduziert wird. Mit dieser Funktion werden die folgenden neuen Funktionen hinzugefügt:
Ablaufsteuerung:NNAPI 1.3 unterstützt die allgemeine Ablaufsteuerung mit den neuen Diagrammvorgängen
ANEURALNETWORKS_IF
undANEURALNETWORKS_WHILE
, die andere Modelle als Argumente mit dem neuen OperandentypANEURALNETWORKS_MODEL
akzeptieren. Außerdem werden mit dieser Funktion die folgenden neuen Funktionen eingeführt:
NDK Thermal API
Wenn Geräte zu warm werden, kann die CPU und/oder GPU gedrosselt werden. Das kann sich unerwartet auf Apps auswirken. Bei Apps oder Spielen mit komplexen Grafiken, rechenintensiven Vorgängen oder anhaltenden Netzwerkaktivitäten treten eher Probleme auf.
Mit der NDK Thermal API in Android 11 können Sie Temperaturänderungen auf dem Gerät überwachen und dann Maßnahmen ergreifen, um den Stromverbrauch und die Gerätetemperatur niedrig zu halten. Diese API ähnelt der Java Thermal API. Sie können sie verwenden, um Benachrichtigungen für jede Änderung des thermischen Status zu erhalten oder den aktuellen Status direkt abzurufen.
Text und Eingabe
Verbesserte IME-Übergänge
In Android 11 werden neue APIs eingeführt, um Übergänge für Eingabemethoden-Editoren (IMEs) wie Bildschirmtastaturen zu verbessern. Diese APIs erleichtern es, die Inhalte Ihrer App in Synchronisation mit dem Ein- und Ausblenden der IME und mit anderen Elementen wie der Status- und der Navigationsleiste anzupassen.
Wenn ein IME angezeigt werden soll, während ein EditText
den Fokus hat, rufen Sie view.getInsetsController().show(Type.ime())
auf.
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, rufen Sie view.getInsetsController().hide(Type.ime())
auf.
Mit dem Aufruf von view.getRootWindowInsets().isVisible(Type.ime())
können Sie prüfen, ob derzeit eine IME 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 WindowInsetsAnimation.Callback
für View.setWindowInsetsAnimationCallback()
angeben.
Sie können diesen Listener für jede Ansicht festlegen. Es muss sich nicht um ein EditText
-Objekt handeln.
Die IME ruft die Methode onPrepare()
des Listeners auf und dann zu Beginn des Übergangs onStart()
. Anschließend wird bei jedem Fortschritt im Übergang onProgress()
aufgerufen. Wenn die Umstellung abgeschlossen ist, ruft das IME onEnd()
auf.
Sie können jederzeit den Fortschritt der Umstellung abrufen, indem Sie WindowInsetsAnimation.getFraction()
aufrufen.
Ein Beispiel für die Verwendung dieser APIs finden Sie im neuen WindowInsetsAnimation-Codebeispiel.
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 an den Fenstereinsätzen 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() {} });
Aktualisierungen der ICU-Bibliotheken
In Android 11 wird das android.icu
-Paket auf Version 66 der ICU-Bibliothek aktualisiert. In Android 10 wird Version 63 verwendet. Die neue Bibliotheksversion enthält aktualisierte CLDR-Lokalitätsdaten und eine Reihe von Verbesserungen für die Internationalisierung in Android.
Wichtige Änderungen in den neuen Bibliotheksversionen sind:
- Viele Formatierungs-APIs unterstützen jetzt einen neuen Rückgabeobjekttyp, der
FormattedValue
erweitert. - Die
LocaleMatcher
API wurde um eine Builder-Klasse, Unterstützung für den Typjava.util.Locale
und eine Ergebnisklasse mit zusätzlichen Daten zu einem Treffer erweitert. - Unicode 13 wird jetzt unterstützt.
Medien
MediaCodec-Puffer zuweisen
Android 11 enthält neue MediaCodec
-APIs, mit denen Apps mehr Kontrolle bei der Zuweisung von Ein- und Ausgabepuffern haben. So kann Ihre App den Arbeitsspeicher effizienter verwalten.
Neue Kurse:
Neue Methoden:
MediaCodec.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
Außerdem hat sich das Verhalten von 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 dem Slot einen LinearBlock/HardwareBuffer 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
In Android 11 wurde die MediaCodec
verbessert, 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 geringer Latenz unterstützt, indem Sie FEATURE_LowLatency
an MediaCodecInfo.CodecCapabilities.isFeatureSupported()
übergeben.
So aktivieren oder deaktivieren Sie die Decodierung mit geringer Latenz:
- Legen Sie den neuen Schlüssel
KEY_LOW_LATENCY
mitMediaCodec.configure()
auf 0 oder 1 fest. - Legen Sie den neuen Parameterschlüssel
PARAMETER_KEY_LOW_LATENCY
mitMediaCodec.setParameters()
auf 0 oder 1 fest.
Neue AAudio-Funktion AAudioStream_release()
Die Funktion AAudioStream_close()
gibt einen Audiostream frei und schließt ihn gleichzeitig. Das kann gefährlich sein. Wenn ein anderer Prozess versucht, auf den Stream zuzugreifen, nachdem er geschlossen wurde, stürzt der Prozess ab.
Mit der neuen Funktion AAudioStream_release()
wird der Stream freigegeben, aber nicht geschlossen. Dadurch werden die Ressourcen freigegeben und der Stream befindet sich in einem bekannten Status. Das Objekt bleibt bestehen, bis Sie AAudioStream_close()
aufrufen.
MediaParser API
MediaParser ist eine neue Low-Level-API für die Media-Extraktion. Sie ist flexibler als MediaExtractor und bietet zusätzliche Kontrolle über die Funktionen zum Extrahieren von Media.
Audioaufnahme von einem USB-Gerät
Wenn eine App ohne die Berechtigung RECORD_AUDIO
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“. Der Nutzer muss die Warnung also bestätigen und die Berechtigung jedes Mal erteilen, wenn eine App Zugriff anfordert.
Um dieses Verhalten zu vermeiden, sollte Ihre App die Berechtigung RECORD_AUDIO
anfordern.
Gleichzeitiger Mikrofonzugriff
In Android 11 wurden den APIs AudioRecord
, MediaRecorder
und AAudioStream
neue Methoden hinzugefügt. Mit diesen Methoden kann die gleichzeitige Erfassung unabhängig vom ausgewählten Anwendungsfall aktiviert und deaktiviert werden. Weitere Informationen finden Sie unter Audioeingabe freigeben.
Ausgabeauswahl
Unter Android 11 wird ein neues Verhalten für Apps implementiert, die die Cast- und Mediarouter-APIs verwenden.
Neben dem Zugriff auf die Übertragungsoptionen über eine App werden die Optionen zum Wechseln auch im System-Mediaplayer angezeigt. So können Nutzer nahtlos zwischen Geräten wechseln, wenn sich ihr Wiedergabe- und Hörkontext ändert, z. B. wenn sie sich ein Video in der Küche ansehen oder auf einem Smartphone oder Audioinhalte zu Hause oder im Auto hören. Weitere Informationen
Konnektivität
Verbesserungen bei WLAN-Passpoint
Informationen zu den in Android 11 hinzugefügten Passpoint-Funktionen finden Sie unter Passpoint.
Die Wi‑Fi Suggestion 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 Trennungsanfragen zulassen.
- Passpoint-Netzwerke sind in die Suggestion API eingebunden und können dem Nutzer vorgeschlagen werden.
- Mit den Analytics APIs können Sie Informationen zur Qualität Ihrer Netzwerke abrufen.
CallScreeningService-Updates
Ab Android 11 kann ein CallScreeningService Informationen zum STIR/SHAKEN-Bestätigungsstatus (verstat) für eingehende Anrufe anfordern. Diese Informationen sind Teil der Anrufdetails für eingehende Anrufe.
Wenn eine CallScreeningService
die Berechtigung READ_CONTACTS
hat, wird die App benachrichtigt, wenn eingehende Anrufe von einer Nummer in den Kontakten des Nutzers oder ausgehende Anrufe an eine solche Nummer erfolgen.
Weitere Informationen finden Sie unter Spoofing der Anrufer-ID verhindern.
Neuigkeiten 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
Apps, die auf API-Level 30 und höher ausgerichtet sind oder auf Geräten ausgeführt werden, die mit API-Level 29 und höher eingeführt wurden, können IKEv2/IPsec auf VPNs für sowohl vom Nutzer konfigurierte als auch appbasierte VPNs anwenden.
Die VPNs werden nativ im Betriebssystem ausgeführt, wodurch der Code vereinfacht wird, der zum Herstellen von IKEv2/IPsec-VPN-Verbindungen in einer App erforderlich ist.
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 PasspointConfiguration.getUniqueId()
verwenden, um eine eindeutige Kennung für ein PasspointConfiguration
-Objekt abzurufen. So können Nutzer Ihrer App mehrere Profile mit demselben voll qualifizierten Domainnamen (Fully Qualified Domain Name, 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 FQDN hat. Unter Android 11 und höher ist es möglich, mehrere Profile mit demselben FQDN zu installieren, die mit dem Netzwerk des Home-Anbieters übereinstimmen, wenn der Nutzer eine SIM-Karte mit MCC oder MNC installiert.
Unterstützung für GNSS-Antennen
Mit Android 11 wird die Klasse GnssAntennaInfo
eingeführt, mit der Ihre App die zentimetergenaue Positionierung, die das Global Navigation Satellite System (GNSS) bietet, besser nutzen kann.
Weitere Informationen finden Sie im Leitfaden zur Antennenkalibrierung.
Grafik
NDK-Bilddecoder
Die NDK-API ImageDecoder
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 den Bilddecoder.
API für die Bildrate
Android 11 bietet eine API, mit der Apps das System über ihre beabsichtigte Framerate informieren können, um Ruckeln auf Geräten zu reduzieren, die mehrere Aktualisierungsraten unterstützen. Informationen zur Verwendung dieser API finden Sie im Leitfaden zur Bildrate.
Unterstützung für niedrige Latenz anfordern und prüfen
Bestimmte Displays können die Grafik nachbearbeiten, z. B. einige externe Displays und Fernseher. Durch diese Nachbearbeitung wird die Grafik verbessert, aber die Latenz kann sich dadurch erhöhen. Neuere Displays, die HDMI 2.1 unterstützen, haben einen automatischen Modus mit geringer Latenz (ALLM, auch als Spielmodus bezeichnet), der die Latenz minimiert, indem die Nachbearbeitung deaktiviert wird. Weitere Informationen zu ALLM findest du in der HDMI 2.1-Spezifikation.
Ein Fenster kann anfordern, dass der automatische Modus mit niedriger Latenz verwendet wird, sofern er verfügbar ist. 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 Nachbearbeitung. Wenn Sie herausfinden möchten, ob ein bestimmtes Display dies unterstützt, rufen Sie die neue Methode Display.isMinimalPostProcessingSupported()
auf.
Leistungsstarke Debug-Ebene für Grafiken
Anwendungen können jetzt externe Grafikebenen (GLES, Vulkan) in nativen Anwendungscode laden, um dieselbe Funktionalität wie eine debugfähige App zu bieten, ohne dass es zu Leistungseinbußen kommt. Diese Funktion ist besonders wichtig, wenn Sie Ihr Spiel mit Tools wie GAPID profilieren. Wenn Sie Ihre App profilieren möchten, fügen Sie der Manifestdatei Ihrer App das folgende Metadatenelement hinzu, anstatt die Anwendung debugfähig zu machen:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
Bilder und Kamera
Töne und Vibration für Benachrichtigungen während der Aufnahme stummschalten
Ab Android 11 kann Ihre App bei aktiver Verwendung der Kamera mit setCameraAudioRestriction()
nur Vibrationen, sowohl Töne als auch Vibrationen oder keines von beidem 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
Unter Android 11 gibt es APIs, mit denen abgefragt werden kann, ob die Verwendung von mehr als einer Kamera gleichzeitig unterstützt wird, einschließlich einer Front- und einer Rückkamera.
Verwenden Sie die folgenden Methoden, um zu prüfen, ob das Gerät, auf dem Ihre App ausgeführt wird, die erforderlichen Funktionen unterstützt:
getConcurrentCameraIds()
gibt eineSet
von Kombinationen von Kamera-IDs zurück, die gleichzeitig gestreamt werden können, mit garantierten Streamkombinationen, wenn sie vom selben Anwendungsprozess konfiguriert werden.- 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 gibt die Methode ImageDecoder.decodeDrawable()
, wenn Sie ein HEIF-Bild mit einer Sequenz von Frames (z. B. eine Animation oder ein Serienbild) übergeben, ein AnimatedImageDrawable
mit der gesamten Bildsequenz zurück. In früheren Android-Versionen wurde mit der Methode ein BitmapDrawable
mit nur einem Frame zurückgegeben.
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
Aktualisierungen für Entwickler von Bedienungshilfen
Wenn Sie einen benutzerdefinierten Barrierefreiheitsdienst erstellen, können Sie die folgenden Funktionen in Android 11 verwenden:
- Die für den Nutzer sichtbare Erklärung einer Bedienungshilfe kann jetzt neben Nur-Text auch HTML und Bilder enthalten. Diese Flexibilität erleichtert es Ihnen, Endnutzern zu erklären, was Ihr Dienst leistet und wie er ihnen helfen kann.
- Wenn Sie mit einer Beschreibung des Status eines UI-Elements arbeiten möchten, die semantisch aussagekräftiger als
contentDescription
ist, rufen Sie die MethodegetStateDescription()
auf. - Wenn Sie möchten, dass Touch-Ereignisse den Touch-Explorer des Systems umgehen, rufen Sie
setTouchExplorationPassthroughRegion()
auf. Wenn Sie möchten, dass Gesten den Gestenerkennungsmechanismus des Systems umgehen, rufen SiesetGestureDetectionPassthroughRegion()
auf. - Sie können IME-Aktionen wie „Eingabe“ 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 von App-Prozessen
In Android 11 wird die Methode ActivityManager.getHistoricalProcessExitReasons()
eingeführt, mit der die Gründe für kürzlich erfolgte Prozessbeendigungen gemeldet werden. Apps können mit dieser Methode 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 für spätere Analysen speichern.
Die Methode getHistoricalProcessExitReasons()
gibt Instanzen der Klasse ApplicationExitInfo
zurück, die Informationen zum Beenden eines App-Prozesses enthalten. Durch Aufrufen von getReason()
für eine Instanz dieser Klasse 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 unbehandelte Ausnahme aufgetreten ist. Wenn Ihre App die Eindeutigkeit von Beendigungsereignissen sicherstellen muss, kann sie eine app-spezifische Kennung verwalten, z. B. einen Hashwert, der auf dem Zeitstempel aus der Methode getTimestamp()
basiert.
Zusätzliche Ressourcen
Weitere Informationen finden Sie im Medium-Artikel New Android 11 tools to make apps more private and stable.
Ressourcen-Loader
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 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 App bereitstellen. ResourcesProvider
-Objekte bieten wiederum Methoden zum Laden von Ressourcendaten aus APKs und Ressourcentabellen.
Ein wichtiger Anwendungsfall für diese API ist das benutzerdefinierte Laden von Assets. Mit loadFromDirectory()
können Sie eine ResourcesProvider
erstellen, die die Auflösung von dateibasierten Ressourcen und Assets umleitet, sodass in einem bestimmten Verzeichnis anstelle des Anwendungs-APKs gesucht wird. Sie können auf diese Assets über die Methoden der open()
-Familie aus der API-Klasse AssetManager
zugreifen, genau wie bei Assets, die im APK enthalten sind.
APK-Signaturschema v4
Mit Android 11 wird die Unterstützung für das APK-Signaturschema v4 eingeführt. Bei diesem Schema wird eine neue Art von Signatur in einer separaten Datei (apk-name.apk.idsig
) erstellt. Ansonsten ähnelt es v2 und v3. Am APK werden keine Änderungen 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 Kompilierzeit deklarieren, welche Arten von Daten sie empfangen kann. Dazu muss im App-Manifest ein Intent-Filter definiert werden. Unter Android 10 und niedriger können Apps ihre Intent-Filter zur Laufzeit nicht ändern. Das ist ein Problem für Virtualisierungs-Apps (z. B. virtuelle Maschinen und Remote-Desktops), da sie nicht genau wissen können, welche Software der Nutzer darin installieren wird.
In Android 11 werden MIME-Gruppen eingeführt, ein neues Manifestelement, mit dem eine App einen dynamischen Satz von MIME-Typen in einem Intent-Filter deklarieren und zur Laufzeit programmatisch ändern kann. Wenn Sie eine MIME-Gruppe verwenden möchten, fügen Sie in Ihr App-Manifest ein Datenelement mit dem neuen Attribut android:mimeGroup
ein:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
Der Wert des Attributs android:mimeGroup
ist eine beliebige String-ID, die die MIME-Gruppe zur Laufzeit identifiziert. Sie können auf den Inhalt einer MIME-Gruppe zugreifen und ihn aktualisieren, indem Sie die ID der Gruppe 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 explizit im Manifest deklariert ist.
Verbesserungen bei Autofill
In Android 11 wurden Verbesserungen für Dienste zum automatischen Ausfüllen eingeführt.
Hinweis-IDs in AssistStructure.ViewNode
Es ist oft nützlich, wenn Autofill-Dienste einen Signatur-Hash für eine Ansicht basierend auf den Eigenschaften der Ansicht berechnen. Der View-Hinweis ist eine besonders gute Eigenschaft, die beim Berechnen eines Signatur-Hashs berücksichtigt werden sollte. Der Hinweisstring kann sich jedoch mit dem Gebietsschema des Smartphones ändern. Um dieses Problem zu beheben, wird in Android 11 AssistStructure.ViewNode
um die neue Methode getHintIdEntry()
erweitert, die die Ressourcen-ID für den Hinweistext einer Ansicht zurückgibt. Diese Methode gibt einen gebietsschemaunabhängigen Wert zurück, mit dem Sie Signatur-Hashes berechnen können.
Ereignisse in Datasets anzeigen
Damit Autofill-Dienste ihre Vorschläge verbessern können, bietet Android 11 eine Möglichkeit, Fälle zu identifizieren, in denen ein Autofill-Dienst Datasets präsentiert hat, der Nutzer aber keines davon ausgewählt hat. In Android 11 meldet FillEventHistory
den neuen Ereignistyp TYPE_DATASETS_SHOWN
. FillEventHistory
protokolliert ein Ereignis dieses Typs, wenn der Autofill-Dienst dem Nutzer ein oder mehrere Datasets präsentiert. 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
Tastaturen und andere IME-Methoden können jetzt Autofill-Vorschläge inline, in einem Vorschlagsstreifen oder einer ähnlichen Benutzeroberfläche anstelle eines Drop-down-Menüs anzeigen. Um sensible Informationen wie Passwörter und Kreditkartennummern zu schützen, werden die Vorschläge dem Nutzer angezeigt, sind aber für die IME erst sichtbar, wenn der Nutzer einen Vorschlag auswählt. Informationen dazu, wie IMEs und Passwortmanager dieses Feature 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. Diese Funktion erleichtert es einem Gerät, kontextbezogene Informationen zu liefern, 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 zum Erfassen von Inhalten verfügbar machen möchten, rufen Sie die Methode shareData()
für eine Instanz von ContentCaptureManager
auf. Wenn das System die Anfrage zur Datenfreigabe akzeptiert, erhält Ihre App einen schreibgeschützten Dateideskriptor, der für den Dienst zur Inhaltserfassung freigegeben werden kann.