Android 11 bietet Entwicklern tolle neue Funktionen und APIs. In den folgenden Abschnitten erfahren Sie mehr über die Funktionen für Ihre Apps und die ersten Schritte mit den 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 deine Apps auswirken können, findest du 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 Erlebnisse
Gerätesteuerung
Android 11 enthält eine neue ControlsProviderService API, mit der du Steuerelemente für verbundene externe Geräte bereitstellen kannst. Diese Einstellungen werden im Android-Ein/Aus-Menü unter Gerätesteuerung angezeigt. Weitere Informationen finden Sie unter Externe Geräte steuern.
Mediensteuerung
Mit Android 11 wird die Anzeige 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 oder in Übertragungssitzungen erkannt wurden, und 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 öffnen zu müssen. Wenn die Wiedergabe beginnt, interagiert der Nutzer wie gewohnt mit den Mediensteuerelementen.
Weitere Informationen findest du unter Mediensteuerung.
Displays
Bessere Unterstützung für Wasserfalldiagramme
Android 11 bietet mehrere APIs zur Unterstützung von Waterfall-Displays, die sich um den Rand des Geräts erstrecken. Diese Displays werden als Variante von Displays mit Display-Aussparungen behandelt. Die vorhandenen DisplayCutout.getSafeInset…()-Methoden geben jetzt den sicheren Bereich zurück, um sowohl Waterfall-Bereiche als auch Aussparungen zu vermeiden.
So rendern Sie Ihre App-Inhalte im Bereich des Wasserfalls:
Rufen Sie
DisplayCutout.getWaterfallInsets()auf, um die genauen Abmessungen des Wasserfall-Insets zu erhalten.Setze das Fensterlayout-Attribut
layoutInDisplayCutoutModeaufLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS, damit sich das Fenster an allen Bildschirmrändern in die Aussparungs- und Waterfall-Bereiche erstrecken kann. Achte darauf, dass sich keine wichtigen Inhalte im Bereich des Ausschnitts oder des Wasserfalls befinden.
Scharnierwinkelsensor und faltbare Geräte
Android 11 ermöglicht es Apps, die auf Geräten mit Scharnier-basierten Bildschirmkonfigurationen ausgeführt werden, den Winkel des Scharniers zu 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. Mit diesen Rohmesswerten können Sie detaillierte Animationen ausführen, während der Nutzer das Gerät bewegt.
Weitere Informationen findest du unter Faltbare Smartphones.
Unterhaltungen
Verbesserungen bei Unterhaltungen
Android 11 bietet eine Reihe von Verbesserungen bei der Verarbeitung von Unterhaltungen. Unterhaltungen sind bidirektionale Echtzeitkommunikation zwischen zwei oder mehr Personen. Diese Unterhaltungen werden besonders hervorgehoben und Nutzer haben mehrere neue Optionen für die Interaktion mit ihnen.
Weitere Informationen zu Unterhaltungen und dazu, wie deine App sie unterstützen kann, findest du unter Personen und Unterhaltungen.
Chat-Bubbles
Bubbles sind jetzt für Entwickler verfügbar, um Unterhaltungen im gesamten System besser sichtbar zu machen. Bubbles war eine experimentelle Funktion in Android 10, die über eine Entwickleroption aktiviert wurde. In Android 11 ist dies 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 für Unterhaltungen erfüllen. Insbesondere muss die Benachrichtigung mit einer Verknüpfung verknüpft sein.
Wenn du vor Android 11 eine Benachrichtigung als Bubble anzeigen lassen wolltest, musstest du explizit angeben, dass die Benachrichtigung immer im Dokument-UI-Modus gestartet werden soll. Ab Android 11 ist diese Einstellung nicht mehr erforderlich. Wenn die Benachrichtigung als Bubble angezeigt wird, wird sie von der Plattform automatisch so eingestellt, dass sie immer im Dokument-UI-Modus gestartet wird.
Es gibt eine Reihe von Verbesserungen bei der Leistung von Bubbles und Nutzer haben mehr Flexibilität beim Aktivieren und Deaktivieren von Bubbles für jede App. Für Entwickler, die experimentelle Unterstützung implementiert haben, gibt es in Android 11 einige Änderungen an den APIs:
- Der Konstruktor
BubbleMetadata.Builder()ohne Parameter wurde eingestellt. Verwenden Sie stattdessen einen der beiden neuen KonstruktorenBubbleMetadata.Builder(PendingIntent, Icon)oderBubbleMetadata.Builder(String). - Erstellen Sie
BubbleMetadataaus einer Verknüpfungs-ID, indem SieBubbleMetadata.Builder(String)aufrufen. Der übergebene String muss mit der Verknüpfungs-ID übereinstimmen, die fürNotification.Builderangegeben wurde. - Erstellen Sie Bubble-Symbole mit
Icon.createWithContentUri()oder mit der neuen MethodecreateWithAdaptiveBitmapContentUri().
Visuelle 5G-Anzeigen
Informationen zum Anzeigen von 5G-Anzeigen auf den Geräten der Nutzer finden Sie unter Nutzer informieren, wenn sie 5G verwenden.
Datenschutz
Android 11 führt eine Vielzahl von Änderungen und Einschränkungen ein, um den Datenschutz für Nutzer zu verbessern. Weitere Informationen finden Sie auf der Seite Datenschutz.
Sicherheit
Updates für die biometrische 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 Biometric-Bibliothek angezeigt.
Authentifizierungstypen
In Android 11 wird die Schnittstelle BiometricManager.Authenticators eingeführt, mit der du die von deiner App unterstützten Authentifizierungstypen deklarieren kannst.
Verwendeten Authentifizierungstyp ermitteln
Nachdem sich der Nutzer authentifiziert hat, können Sie mit getAuthenticationType() prüfen, ob er sich mit einem Geräte- oder biometrischen Berechtigungsnachweis authentifiziert hat.
Zusätzliche Unterstützung für Schlüssel mit Authentifizierung pro Verwendung
Android 11 bietet mehr Unterstützung für die Authentifizierung mit Schlüsseln für die einmalige Authentifizierung.
Eingestellte Methoden
In Android 11 werden die folgenden Methoden eingestellt:
- 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. beim maschinellen Lernen oder bei der Medienwiedergabe, möchte deine App möglicherweise dasselbe große Dataset wie eine andere App verwenden. In früheren Android-Versionen mussten deine App und eine andere App jeweils eine separate Kopie desselben Datasets herunterladen.
Um die Datenredundanz sowohl im Netzwerk als auch auf dem Laufwerk zu reduzieren, können diese großen Datasets unter Android 11 mithilfe von freigegebenen 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 Over-the-air-Update abgeschlossen hat und neu gestartet wurde, sind die im mit Anmeldedaten geschützten Speicher abgelegten CE-Schlüssel (Credential Encrypted) sofort für Vorgänge mit dateibasierter Verschlüsselung (File-Based Encryption, FBE) verfügbar. Das bedeutet, dass deine App nach einem Over-the-Air-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 das Debugging Ihrer App von Ihrer Workstation über die Android Debug Bridge (ADB). Sie können 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 gängigen Problemen bei USB-Verbindungen 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 sehr 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 ein ausreichender Teil des APK installiert wird, um die App zu starten, während die restlichen 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 ohne Benachrichtigung verwendet.
Verwende 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 v4-Signaturdatei muss sich neben dem APK befinden, damit diese Funktion funktioniert.
Fehlererkennung mit dem nativen Arbeitsspeicherzuweiser
GWP-ASan ist eine Funktion zur nativen Arbeitsspeicherzuweisung, 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
Mit Android 11 wird die Neural Networks API (NNAPI) erweitert und verbessert.
Neue Vorgänge
In NNAPI 1.3 wird ein neuer Operandentyp, TENSOR_QUANT8_ASYMM_SIGNED, eingeführt, um das neue Quantisierungsschema von TensorFlow Lite zu unterstützen.
Darüber hinaus werden mit NNAPI 1.3 die folgenden neuen Vorgänge eingeführt:
QUANTIZED_LSTMIFWHILEELUHARD_SWISHFILLRANK
Neue ML-Steuerelemente
NNAPI 1.3 führt neue Steuerelemente ein, die für einen reibungslosen Ablauf des maschinellen Lernens sorgen:
QoS API: Die neue Quality of Service API unterstützt die Priorisierung und Aufgabenfristen in der NNAPI mit den folgenden neuen Funktionen:
Eingabe/Ausgabe für Speicherdomains: 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, was die Laufzeitleistung neuronaler Netzwerke von Android verbessert. Mit dieser Funktion wird 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 Speicherdomain des neuronalen Netzwerks.
Unterstützung für Dependency API und Sync Fence: NNAPI 1.3 unterstützt asynchrones Computing mit Abhängigkeiten, wodurch der Aufwand beim Aufrufen kleiner verketteter Modelle erheblich reduziert wird. Mit dieser Funktion werden die folgenden neuen Funktionen hinzugefügt:
Kontrollfluss: NNAPI 1.3 unterstützt den allgemeinen Kontrollfluss mit den neuen Graphvorgängen
ANEURALNETWORKS_IFundANEURALNETWORKS_WHILE, die andere Modelle als Argumente mit dem neuen OperandentypANEURALNETWORKS_MODELakzeptieren. Außerdem werden mit dieser Funktion die folgenden neuen Funktionen hinzugefügt:
NDK Thermal API
Wenn Geräte zu warm werden, drosseln sie möglicherweise die CPU und/oder GPU, was sich auf unerwartete Weise auf Apps auswirken kann. Bei Apps oder Spielen mit komplexen Grafiken, hohem Rechenaufwand oder anhaltender Netzwerkaktivität treten eher Probleme auf.
Mit der NDK Thermal API in Android 11 kannst du Temperaturänderungen auf dem Gerät überwachen und dann Maßnahmen ergreifen, um den Stromverbrauch zu senken und die Gerätetemperatur zu senken. Diese API ähnelt der Java Thermal API. Du kannst sie verwenden, um Benachrichtigungen zu Änderungen des Temperaturstatus zu erhalten oder den aktuellen Status direkt abzufragen.
Text und Eingabe
Verbesserte IME-Übergänge
In Android 11 werden neue APIs eingeführt, um die Übergänge für Eingabemethoden-Editoren (IMEs) wie Bildschirmtastaturen zu verbessern. Mit diesen APIs können Sie den Inhalt Ihrer App einfacher an das Erscheinen und Verschwinden der IME und an andere Elemente wie die Status- und Navigationsleiste anpassen.
Wenn Sie eine Eingabemethode anzeigen möchten, 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 du die Eingabemethode ausblenden möchtest, rufe view.getInsetsController().hide(Type.ime()) auf.
Mit view.getRootWindowInsets().isVisible(Type.ime()) können Sie prüfen, ob eine Eingabemethode derzeit sichtbar ist.
Wenn Sie die Ansichten Ihrer App mit dem Ein- und Ausblenden des IME synchronisieren möchten, legen Sie einen Listener für eine Ansicht fest. Dazu übergeben Sie View.setWindowInsetsAnimationCallback() ein WindowInsetsAnimation.Callback.
Sie können diesen Listener für jede Ansicht festlegen, es muss keine EditText sein. Die Eingabemethode ruft die Methode onPrepare() Ihres Listeners auf und dann zu Beginn des Übergangs onStart(). Anschließend wird bei jedem Fortschritt im Übergang onProgress() aufgerufen. Wenn der Übergang abgeschlossen ist, ruft die IME onEnd() auf.
Sie können jederzeit während der Umstellung den Fortschritt abrufen, indem Sie WindowInsetsAnimation.getFraction() aufrufen.
Ein Beispiel für die Verwendung dieser APIs findest du im neuen Codebeispiel WindowInsetsAnimation.
IME-Animation steuern
Du kannst 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 Fenster-Insets 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 du die Eingabemethode oder eine andere Systemleiste verschieben möchtest, rufe 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 Paket android.icu auf Version 66 der ICU-Bibliothek aktualisiert. In Android 10 wurde Version 63 verwendet. Die neue Bibliotheksversion enthält aktualisierte CLDR-Gebietsschemadaten und eine Reihe von Verbesserungen für die Internationalisierung in Android.
Zu den wichtigsten Änderungen in den neuen Bibliotheksversionen gehören:
- Viele Formatierungs-APIs unterstützen jetzt einen neuen Rückgabeobjekttyp, der
FormattedValueerweitert. - Die
LocaleMatcherAPI wurde um eine Builder-Klasse, Unterstützung für den Typjava.util.Localeund 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, mit denen Apps mehr Kontrolle beim Zuweisen von Eingabe- 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.getQueueRequestmit 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-Zwischenspeichern abzurufen.
Decodierung mit niedriger Latenz in MediaCodec
Android 11 verbessert MediaCodec, um die Decodierung 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() übergibst.
So aktivieren oder deaktivieren Sie die Decodierung mit niedriger Latenz:
- Legen Sie den neuen Schlüssel
KEY_LOW_LATENCYmitMediaCodec.configure()auf 0 oder 1 fest. - Legen Sie den neuen Parameterschlüssel
PARAMETER_KEY_LOW_LATENCYmitMediaCodec.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.
Die neue Funktion AAudioStream_release() gibt den Stream frei, schließt ihn aber nicht. Dadurch werden die Ressourcen freigegeben und der Stream bleibt in einem bekannten Zustand. Das Objekt bleibt bestehen, bis Sie AAudioStream_close() aufrufen.
MediaParser API
MediaParser ist eine neue Low-Level-API für die Medienextraktion. Sie ist flexibler als MediaExtractor und bietet zusätzliche Kontrolle über die Funktionen zur Medienextraktion.
Audioaufnahme von einem USB-Gerät
Wenn eine App ohne die Berechtigung RECORD_AUDIO über UsbManager direkten Zugriff auf ein USB-Audiogerät mit Audioaufnahmefunktion (z. B. ein USB-Headset) anfordert, wird eine neue Warnmeldung angezeigt, in der der Nutzer aufgefordert wird, die Berechtigung zur Verwendung des Geräts zu bestätigen. Das System ignoriert die Option „Immer verwenden“. Der Nutzer muss also die Warnung 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 werden den APIs AudioRecord, MediaRecorder und AAudioStream neue Methoden hinzugefügt. Mit diesen Methoden wird die Möglichkeit zur gleichzeitigen Erfassung unabhängig vom ausgewählten Anwendungsfall aktiviert und deaktiviert. Weitere Informationen finden Sie unter Audioeingabe freigeben.
Ausgabeauswahl
In Android 11 wird ein neues Verhalten für Apps implementiert, die die Cast API und die MediaRouter API verwenden.
Die Optionen zum Wechseln sind nicht nur in einer App, sondern auch im System-Mediaplayer verfügbar. So können Nutzer nahtlos zwischen Geräten wechseln, wenn sich der Wiedergabekontext ändert, z. B. wenn sie ein Video in der Küche statt auf dem Smartphone ansehen oder Audioinhalte zu Hause oder im Auto anhören. Weitere Informationen findest du unter Ausgabewechsler.
Verbindung
Verbesserungen bei WLAN-Passpoint
Informationen zu den in Android 11 hinzugefügten Passpoint-Funktionen findest du unter Passpoint.
Wi-Fi Suggestion API ist maximiert
Android 11 erweitert die Wi-Fi Suggestion API, um die Netzwerkverwaltungsfunktionen deiner App zu verbessern, einschließlich der folgenden:
- 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 Analytics APIs können Sie Informationen zur Qualität Ihrer Netzwerke abrufen.
Updates für CallScreeningService
Ab Android 11 kann ein CallScreeningService Informationen zum STIR/SHAKEN-Bestätigungsstatus (verstat) für eingehende Anrufe anfordern. Diese Informationen werden als Teil der Anrufdetails für eingehende Anrufe bereitgestellt.
Wenn 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 Anrufer-ID-Spoofing verhindern.
Updates für Open Mobile API
Informationen zur OMAPI-Unterstützung unter Android 11 und höher finden Sie unter Unterstützung für Open Mobile API-Lesegeräte.
Leistungsstarke VPNs
Apps, die auf das API-Level 30 und höher ausgerichtet sind oder auf Geräten mit dem API-Level 29 und höher ausgeführt werden, können IKEv2/IPsec auf VPNs anwenden, sowohl für vom Nutzer konfigurierte als auch für App-basierte VPNs.
Die VPNs werden nativ im Betriebssystem ausgeführt, was den Code vereinfacht, der zum Herstellen von IKEv2-/IPsec-VPN-Verbindungen in einer App erforderlich ist.
Prozessbasierte Netzwerkzugriffssteuerung
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 zu erhalten. Dadurch 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 Mobilfunknetzkennzahl (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 mit dem Netzwerk als Heimanbieter übereinstimmt, wenn der Nutzer eine SIM-Karte mit MCC oder MNC installiert.
Unterstützung für GNSS-Antennen
In Android 11 wird die Klasse GnssAntennaInfo eingeführt, mit der Ihre App die zentimetergenaue Positionierung des Global Navigation Satellite System (GNSS) besser nutzen kann.
Weitere Informationen finden Sie im Leitfaden zu Informationen zur Antennenkalibrierung.
Grafik
NDK-Bild-Decoder
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 nicht mehr die Framework-APIs (über JNI) verwenden oder Bilddecodierungsbibliotheken von Drittanbietern bündeln. Weitere Informationen finden Sie im Entwicklerleitfaden für Bilddecoder.
Frame rate API
Android 11 bietet eine API, mit der Apps das System über die gewünschte Framerate informieren können, um Ruckeln auf Geräten zu reduzieren, die mehrere Aktualisierungsraten unterstützen. Informationen zur Verwendung dieser API findest du im Leitfaden zur Framerate.
Unterstützung für niedrige Latenz anfordern und prüfen
Bestimmte Displays können eine grafische 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 für geringe Latenzzeit (ALLM, auch als Spielmodus bezeichnet), der die Latenz minimiert, indem diese Nachbearbeitung deaktiviert wird. Weitere Informationen zu ALLM findest du in der HDMI 2.1-Spezifikation.
Ein Fenster kann die Verwendung des automatischen Modus für geringe Latenz anfordern, sofern dieser 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.
Wenn Sie die minimale Nachbearbeitung aktivieren oder deaktivieren möchten, rufen Sie Window.setPreferMinimalPostProcessing() auf oder setzen Sie das Attribut preferMinimalPostProcessing des Fensters auf true. Nicht alle Displays unterstützen die minimale Nachbearbeitung. Um herauszufinden, ob ein bestimmtes Display sie unterstützt, rufen Sie die neue Methode Display.isMinimalPostProcessingSupported() auf.
Leistungsstarke Grafik-Debug-Ebenen-Injektion
Anwendungen können jetzt externe Grafikebenen (GLES, Vulkan) in nativen Anwendungscode laden, um dieselbe Funktionalität wie eine debugfähige App bereitzustellen, ohne dass dadurch Leistungseinbußen entstehen. Diese Funktion ist besonders wichtig, wenn Sie Ihre Anwendung mit Tools wie GAPID profilieren. Wenn Sie ein Profil für Ihre App erstellen möchten, fügen Sie das folgende Metadatenelement in die Manifestdatei Ihrer App ein, anstatt die Anwendung debugfähig zu machen:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
Bilder und Kamera
Benachrichtigungstöne und Vibrationen während der Aufnahme stummschalten
Ab Android 11 kann Ihre App, wenn die Kamera aktiv verwendet wird, mit setCameraAudioRestriction() nur Vibrationen, sowohl Töne als auch Vibrationen oder keines von beiden 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
In Android 11 wurden APIs hinzugefügt, mit denen die Unterstützung für die gleichzeitige Verwendung mehrerer Kameras abgefragt werden kann, einschließlich einer Front- und einer 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 eineSetvon Kombinationen von Kamera-IDs zurück, die gleichzeitig mit garantierten Stream-Kombinationen streamen können, wenn sie vom selben Anwendungsprozess konfiguriert werden.isConcurrentSessionConfigurationSupported()fragt ab, 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 Bildsequenz (z. B. eine Animation oder ein Serienbild) übergeben, gibt die Methode ein AnimatedImageDrawable mit der gesamten Bildsequenz zurück. In früheren Android-Versionen gab die Methode ein BitmapDrawable mit nur einem 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 du einen benutzerdefinierten Bedienungshilfendienst erstellst, kannst du die folgenden Funktionen in Android 11 verwenden:
- Die für Nutzer sichtbare Erklärung eines Bedienungshilfe-Dienstes 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 als
contentDescriptionist, rufen Sie die MethodegetStateDescription()auf. - Wenn du möchtest, dass Touch-Events den Touch-Explorer des Systems umgehen, rufe
setTouchExplorationPassthroughRegion()auf. Wenn Sie möchten, dass Gesten die Gestenerkennung des Systems umgehen, rufen SiesetGestureDetectionPassthroughRegion()auf. - Du kannst IME-Aktionen wie „Eingabe“ und „Weiter“ sowie Screenshots von Fenstern anfordern, für die das Flag
FLAG_SECUREnicht aktiviert ist.
Zusätzliche Funktionen
Gründe für das Beenden von App-Prozessen
In Android 11 wird die Methode ActivityManager.getHistoricalProcessExitReasons() eingeführt, die die Gründe für kürzlich beendete Prozesse meldet. Apps können diese Methode verwenden, um Diagnoseinformationen zu Abstürzen zu erfassen, z. B. ob ein Prozess aufgrund von ANRs, Speicherproblemen oder anderen Gründen beendet wurde.
Außerdem können Sie die neue Methode setProcessStateSummary() verwenden, um benutzerdefinierte Statusinformationen für die spätere Analyse zu speichern.
Die Methode getHistoricalProcessExitReasons() gibt Instanzen der Klasse ApplicationExitInfo zurück, die Informationen zum Beenden eines App-Prozesses enthalten. Wenn du getReason() für eine Instanz dieser Klasse aufrufst, kannst du feststellen, warum der Prozess deiner App beendet wurde. Der Rückgabewert REASON_CRASH gibt beispielsweise an, dass in Ihrer App eine nicht behandelte Ausnahme aufgetreten ist. Wenn Ihre App die Eindeutigkeit von Beendigungsereignissen sicherstellen muss, kann sie eine App-spezifische Kennung verwalten, z. B. einen Hash-Wert, der auf dem Zeitstempel der Methode getTimestamp() basiert.
Zusätzliche Ressourcen
Weitere Informationen finden Sie im Artikel über neue Android 11-Tools, mit denen Apps privater und stabiler werden auf Medium.
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 Anwendung bereitstellen. ResourcesProvider-Objekte bieten wiederum Methoden zum Laden von Ressourcendaten aus APKs und Ressourcentabellen.
Ein primärer Anwendungsfall für diese API ist das Laden benutzerdefinierter Assets. Mit loadFromDirectory() können Sie eine ResourcesProvider erstellen, die die Auflösung dateibasierter Ressourcen und Assets umleitet, sodass ein bestimmtes Verzeichnis anstelle des Anwendungs-APK durchsucht wird. Du kannst auf diese Assets über die Methodenfamilie open() der API-Klasse AssetManager zugreifen, genau wie auf Assets, die im APK enthalten sind.
APK-Signaturschema v4
Android 11 bietet Unterstützung für das APK-Signaturschema v4. Dieses Schema erzeugt eine neue Art von Signatur in einer separaten Datei (apk-name.apk.idsig), ähnelt aber ansonsten v2 und v3. An der 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 beim Kompilieren deklarieren, welche Datentypen sie empfangen kann. Dazu muss im App-Manifest ein Intent-Filter definiert werden. In Android 10 und niedriger können Apps ihre Intent-Filter zur Laufzeit nicht ändern. Dies ist ein Problem für Virtualisierungs-Apps wie virtuelle Maschinen und Remote-Desktops, da sie nicht genau wissen können, welche Software der Nutzer darin installieren wird.
Mit Android 11 werden MIME-Gruppen eingeführt, ein neues Manifestelement, mit dem eine App eine dynamische Gruppe von MIME-Typen in einem Intent-Filter deklarieren und zur Laufzeit programmatisch ändern kann. Wenn du eine MIME-Gruppe verwenden möchtest, füge deinem App-Manifest ein Datenelement mit dem neuen Attribut android:mimeGroup 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 API-Klasse PackageManager übergeben:
Wenn Sie einer MIME-Gruppe programmatisch einen MIME-Typ hinzufügen, funktioniert dieser genau wie ein statischer MIME-Typ, der explizit im Manifest deklariert wurde.
Verbesserungen beim Autofill
Android 11 bietet Verbesserungen für Autofill-Services.
Hinweiskennungen in AssistStructure.ViewNode
Für Autofill-Services ist es oft nützlich, einen Signatur-Hash für eine Ansicht basierend auf den Eigenschaften der Ansicht zu berechnen. Der Ansichtshinweis ist eine besonders gute Property, die beim Berechnen eines Signatur-Hashs einbezogen werden sollte. Der Hinweisstring kann sich jedoch je nach Sprache des Smartphones ändern. Um dieses Problem zu beheben, wird AssistStructure.ViewNode in Android 11 um eine neue getHintIdEntry()-Methode erweitert, die die Ressourcen-ID für den Hinweistext einer Ansicht zurückgibt. Diese Methode liefert einen vom Gebietsschema unabhängigen Wert, mit dem Sie Signatur-Hashes berechnen können.
Ereignisse zu angezeigten Datasets
Damit Autofill-Services ihre Vorschläge verbessern können, bietet Android 11 eine Möglichkeit, Fälle zu identifizieren, in denen ein Autofill-Service Datasets präsentiert hat, der Nutzer jedoch keines davon ausgewählt hat. In Android 11 meldet FillEventHistory einen neuen Ereignistyp TYPE_DATASETS_SHOWN. FillEventHistory protokolliert ein Ereignis dieses Typs, wenn der Autofill-Service dem Nutzer einen oder mehrere Datensätze 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 Eingabemethoden können jetzt Vorschläge für die automatische Vervollständigung inline, in einer Leiste mit Vorschlägen oder einer ähnlichen Oberfläche anzeigen, anstatt in einem Drop-down-Menü. Zum Schutz sensibler Informationen wie Passwörter und Kreditkartennummern werden die Vorschläge dem Nutzer angezeigt, sind aber für die Eingabemethode erst sichtbar, wenn der Nutzer einen Vorschlag auswählt. Informationen dazu, wie IMEs und Passwortmanager diese Funktion unterstützen können, findest du unter Autofill in Tastaturen einbinden.
Datenweitergabe an den Dienst zur Inhaltserfassung
Ab Android 11 kann Ihre App Daten mit dem Dienst zur Inhaltserfassung des Geräts teilen. Diese Funktion erleichtert es einem Gerät, kontextbezogene Informationen bereitzustellen, 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() für eine Instanz von ContentCaptureManager auf. Wenn das System die Anfrage zur Datenweitergabe akzeptiert, erhält Ihre App einen Dateideskriptor, der nur Schreibzugriff erlaubt und mit dem Dienst zur Inhaltserfassung geteilt werden kann.