Android 12 bietet Entwicklern tolle neue Funktionen und APIs. In den folgenden Abschnitten finden 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 findest du im API-Diff-Bericht. Details zu neuen APIs findest du 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 in den Verhaltensänderungen von Android 12 für Apps, die auf Android 12 ausgerichtet sind, und für alle Apps.
Nutzererfahrung
Material You
Mit Android 12 wird eine neue Designsprache namens Material You eingeführt, mit der du noch personalisiertere, ansprechendere Apps entwickeln kannst. Wenn Sie alle aktuellen Material Design 3-Updates in Ihre Apps einbinden möchten, können Sie eine Alphaversion von Material Design-Komponenten ausprobieren.

Verbesserungen bei Widgets
In Android 12 wurde die vorhandene Widgets API überarbeitet, um die Nutzer- und Entwicklerfreundlichkeit auf der Plattform und in Launchern zu verbessern. Wir haben einen Leitfaden erstellt, der dir dabei hilft, dein Widget mit Android 12 kompatibel zu machen und es mit neuen Funktionen zu aktualisieren.
Weitere Informationen finden Sie unter Verbesserungen bei Android 12-Widgets.
Einfügen von Rich Content
Mit Android 12 wird eine neue einheitliche API eingeführt, mit der deine App Rich Content aus jeder verfügbaren Quelle empfangen kann: Zwischenablage, Tastatur oder Drag-and-drop.
Weitere Informationen finden Sie unter Rich Content empfangen.
App Splash Screens API
Mit Android 12 wird eine neue Animation für den App-Start für alle Apps eingeführt. Sie umfasst eine Bewegung in die App ab dem Startpunkt, einen Ladebildschirm mit dem App-Symbol und einen Übergang zur App selbst. Weitere Informationen finden Sie im Entwicklerleitfaden für Splash Screens.
APIs für abgerundete Ecken
In Android 12 werden RoundedCorner und WindowInsets.getRoundedCorner(int
position) eingeführt, die den Radius und den Mittelpunkt für abgerundete Ecken angeben.
Weitere Informationen finden Sie unter Abgerundete Ecken.
Umfangreiches haptisches Feedback
Android 12 erweitert die Tools zum Erstellen von informativem haptischem Feedback für UI-Ereignisse, immersiven und ansprechenden Effekten für Spiele und aufmerksamkeitsstarker Haptik für die Produktivität.
Aktuator-Effekte
Android 12 bietet ausdrucksstarke Effekte wie Low Tick, die die größere Frequenzbandbreite der neuesten Aktuatoren nutzen. Spieleentwickler können jetzt unabhängig voneinander auf mehrere verschiedene Aktuatoren in Gamecontrollern zugreifen, um denselben Effekt synchron oder verschiedene haptische Effekte auf mehreren Aktuatoren zu erzielen. Entwicklern empfehlen wir, die Konstanten und Primitive als Bausteine für vielfältige haptische Effekte zu verwenden – Konstanten zur Verbesserung von UI-Ereignissen und Haptic Composer, um Primitive für komplexere Effekte zu sequenzieren. Diese APIs können auf Pixel 4-Geräten ausprobiert werden. Wir arbeiten weiterhin mit unseren Geräteherstellerpartnern zusammen, um Nutzern im gesamten Ökosystem die neuesten haptischen Funktionen zur Verfügung zu stellen.
Audiogekoppelte haptische Effekte
Android 12-Apps können haptisches Feedback generieren, das von einer Audiositzung abgeleitet wird, indem der Vibrationsmotor des Smartphones verwendet wird. So können noch immersivere Spiele und Audioerlebnisse ermöglicht werden. Beispielsweise können haptisch optimierte Klingeltöne dabei helfen, Anrufer zu identifizieren, oder ein Rennspiel könnte das Gefühl von unebenem Gelände simulieren.
Weitere Informationen finden Sie in der Referenzdokumentation zu HapticGenerator.
AppSearch
Mit Android 12 wird AppSearch, eine leistungsstarke Suchmaschine auf dem Gerät, als Systemdienst eingeführt. Mit AppSearch können Anwendungen strukturierte Daten indexieren und mit integrierten Volltextsuchfunktionen durchsuchen. Darüber hinaus unterstützt AppSearch native Suchfunktionen wie hocheffiziente Indexierung und Abruf, Unterstützung mehrerer Sprachen und Relevanzranking.
AppSearch ist in zwei Varianten verfügbar: als lokaler Index für Ihre Anwendung, der mit älteren Android-Versionen kompatibel ist, oder als zentraler Index, der für das gesamte System in Android 12 verwaltet wird. Über den zentralen Index kann deine App zulassen, dass ihre Daten von der vorinstallierten intelligenten Komponente des Systems auf System-UI-Oberflächen angezeigt werden. Welche Daten genau auf den Oberflächen der System-UI angezeigt werden, hängt vom OEM ab. Außerdem kann Ihre Anwendung Daten sicher mit anderen Anwendungen teilen, damit diese auch in diesen Daten suchen können.
Weitere Informationen zu AppSearch findest du im Entwicklerleitfaden. Du kannst AppSearch mit der AppSearch Jetpack-Bibliothek verwenden, die eine entwicklerfreundliche API-Oberfläche sowie Unterstützung für den Annotationsprozessor bietet.
Spielmodus
Mit der Game Mode API und den Interventionen im Spielmodus kannst du das Gameplay optimieren, indem du Merkmale wie Leistung oder Akkulaufzeit basierend auf den Nutzereinstellungen oder spielspezifischen Konfigurationen priorisierst.
Weitere Informationen findest du unter Spielmodus.
Empfehlungen und Verbesserungen für die Bild-im-Bild-Funktion
Android 12 bietet die folgenden Verbesserungen für den PiP-Modus:
Unterstützung für neue PiP-Gesten
Android 12 unterstützt jetzt Gesten zum Ausblenden und zum Zoomen per Auf- und Zuziehen für das PiP-Fenster:
Um das Fenster zu minimieren, kann der Nutzer es an den linken oder rechten Rand ziehen. Um das Fenster wieder einzublenden, kann der Nutzer entweder auf den sichtbaren Teil des ausgeblendeten Fensters tippen oder es herausziehen.
Nutzer können die Größe des BiB-Fensters jetzt durch Auseinander- und Zusammenziehen anpassen.
Empfohlene neue Funktionen, die einen reibungslosen Übergang zum PiP-Modus unterstützen
In Android 12 wurden die animierten Übergänge zwischen Vollbild- und PiP-Fenstern deutlich verbessert. Wir empfehlen dringend, alle anwendbaren Änderungen zu implementieren. Sobald Sie dies getan haben, werden diese Änderungen automatisch auf große Bildschirme wie faltbare Smartphones und Tablets skaliert, ohne dass weitere Arbeit erforderlich ist.
Diese Funktionen sind:
Ein neues API-Flag für einen reibungsloseren Übergang zum PiP-Modus mit Bedienung über Gesten
Verwende das Flag
setAutoEnterEnabled, um im Modus „Bedienung über Gesten“ beim Wischen nach oben zum Startbildschirm einen flüssigeren Übergang zum PiP-Modus zu ermöglichen. Bisher hat Android gewartet, bis die Animation „Nach oben wischen, um zum Startbildschirm zu gelangen“ abgeschlossen war, bevor das PiP-Fenster eingeblendet wurde.Flüssigere Animationen beim Aktivieren und Deaktivieren des Bild-im-Bild-Modus
Das Flag
SourceRectHintwird jetzt wiederverwendet, um eine flüssigere Animation beim Aufrufen und Beenden des PiP-Modus zu implementieren.Neues API-Flag zum Deaktivieren der nahtlosen Größenanpassung für Nicht-Videoinhalte
Das Flag
SeamlessResizeEnabledsorgt für eine viel flüssigere Überblendungsanimation, wenn die Größe von Nicht-Videoinhalten im BiB-Fenster angepasst wird. Bisher konnte die Größenänderung von Nicht-Videoinhalten in einem PiP-Fenster zu störenden visuellen Artefakten führen.
Neue Anrufbenachrichtigungen, mit denen die Wichtigkeit eingehender Anrufe eingestuft werden kann
In Android 12 wird der neue Benachrichtigungsstil Notification.CallStyle für Telefonanrufe hinzugefügt. Mit dieser Vorlage kann Ihre App die Wichtigkeit aktiver Anrufe hervorheben, indem sie einen auffälligen Chip mit der Anrufzeit in der Statusleiste anzeigt. Der Nutzer kann auf diesen Chip tippen, um zum Anruf zurückzukehren.
Da eingehende und laufende Anrufe für Nutzer am wichtigsten sind, werden diese Benachrichtigungen in der Benachrichtigungsleiste ganz oben angezeigt. Anhand dieser Rangfolge kann das System diese priorisierten Anrufe auch an andere Geräte weiterleiten.
Implementieren Sie den folgenden Code für alle Arten von Anrufen.
Kotlin
// Create a new call with the user as caller. val incoming_caller = Person.Builder() .setName("Jane Doe") .setImportant(true) .build()
Java
// Create a new call with the user as caller. Person incoming_caller = new Person.Builder() .setName("Jane Doe") .setImportant(true) .build();
Verwenden Sie forIncomingCall(), um eine Benachrichtigung im Anrufstil für einen eingehenden Anruf zu erstellen.
Kotlin
// Create a call style notification for an incoming call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller)
Java
// Create a call style notification for an incoming call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent)) .addPerson(incoming_caller);
Verwenden Sie forOngoingCall(), um eine Benachrichtigung im Anrufstil für einen laufenden Anruf zu erstellen.
Kotlin
// Create a call style notification for an ongoing call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller)
Java
// Create a call style notification for an ongoing call. Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forOnGoingCall(caller, hangupIntent)) .addPerson(second_caller);
Verwenden Sie forScreeningCall(), um eine Benachrichtigung im Anrufstil für die Anrufprüfung zu erstellen.
Kotlin
// Create a call style notification for screening a call. val builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller)
Java
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID) .setContentIntent(contentIntent) .setSmallIcon(smallIcon) .setStyle( Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent)) .addPerson(second_caller);
Unterstützung für erweiterte Bilder in Benachrichtigungen
In Android 12 könnt ihr die Benachrichtigungen eurer App jetzt mit animierten Bildern in MessagingStyle()- und BigPictureStyle()-Benachrichtigungen anreichern. Außerdem können Nutzer in Ihrer App jetzt Bildnachrichten senden, wenn sie auf Nachrichten in der Benachrichtigungsleiste antworten.
Verbesserungen des immersiven Modus für die Bedienung über Gesten
Android 12 fasst das bestehende Verhalten zusammen, damit Nutzer im immersiven Modus leichter Befehle zur Bedienung über Gesten ausführen können. Darüber hinaus bietet Android 12 Abwärtskompatibilität für den immersiven Modus.
Teilen von URLs aus „Letzte“ (nur Pixel)
Auf Pixel-Geräten können Nutzer jetzt Links zu kürzlich angesehenen Webinhalten direkt über den Bildschirm „Letzte Apps“ teilen. Nachdem der Nutzer die Inhalte in einer App aufgerufen hat, kann er zum Bildschirm „Zuletzt verwendet“ wischen, die App finden, in der er die Inhalte angesehen hat, und dann auf die Link-Schaltfläche tippen, um die URL zu kopieren oder zu teilen.
Weitere Informationen finden Sie unter Teilen von URLs aus „Letzte“ aktivieren.
Sicherheit und Datenschutz
Privatsphäredashboard
Auf unterstützten Geräten mit Android 12 oder höher wird in den Systemeinstellungen ein Privatsphäre-Dashboard angezeigt. Auf diesem Bildschirm können Nutzer auf separate Bildschirme zugreifen, auf denen angezeigt wird, wann Apps auf Standort-, Kamera- und Mikrofoninformationen zugreifen. Auf jedem Bildschirm wird eine Zeitachse angezeigt, auf der zu sehen ist, wann verschiedene Apps auf einen bestimmten Datentyp zugegriffen haben. Abbildung 1 zeigt die Zeitachse für den Datenzugriff auf Standortinformationen.
Deine App kann Nutzern eine Begründung liefern, warum sie auf Standort-, Kamera- oder Mikrofoninformationen zugreift. Diese Begründung kann auf dem neuen Bildschirm „Privatsphäre-Dashboard“, auf dem Bildschirm „Berechtigungen“ deiner App oder auf beiden angezeigt werden.
Bluetooth-Berechtigungen
In Android 12 werden die Berechtigungen BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE und BLUETOOTH_CONNECT eingeführt. Diese Berechtigungen erleichtern es Apps, die auf Android 12 ausgerichtet sind, mit Bluetooth-Geräten zu interagieren, insbesondere Apps, die keinen Zugriff auf den Gerätestandort benötigen.
Erklärungen zu Bluetooth-Berechtigungen Ihrer App aktualisieren
Aktualisieren Sie die Logik Ihrer App, um Ihr Gerät auf die Ausrichtung auf Android 12 oder höher vorzubereiten. Anstatt ältere Bluetooth-Berechtigungen zu deklarieren, deklarieren Sie modernere Bluetooth-Berechtigungen.
Suche nach Berechtigungsgruppen
Unter Android 12 oder höher können Sie abfragen, wie das System die von der Plattform bereitgestellten Berechtigungen in Berechtigungsgruppen organisiert:
- Wenn du herausfinden möchtest, in welche Berechtigungsgruppe das System eine plattformdefinierte Berechtigung eingeordnet hat, rufe
getGroupOfPlatformPermission()auf. - Wenn du die von der Plattform definierten Berechtigungen ermitteln möchtest, die das System in einer bestimmten Berechtigungsgruppe platziert hat, rufe
getPlatformPermissionsForGroup()auf.
Anwendungs-Overlay-Fenster ausblenden
Damit Entwickler mehr Kontrolle darüber haben, was Nutzer sehen, wenn sie mit der App des Entwicklers interagieren, wird in Android 12 die Möglichkeit eingeführt, Overlay-Fenster auszublenden, die von Apps mit der Berechtigung SYSTEM_ALERT_WINDOW gezeichnet werden.
Nachdem die Berechtigung HIDE_OVERLAY_WINDOWS deklariert wurde, kann eine App setHideOverlayWindows() aufrufen, um anzugeben, dass alle Fenster vom Typ TYPE_APPLICATION_OVERLAY ausgeblendet werden sollen, wenn das eigene Fenster der App sichtbar ist. Apps können dies tun, wenn sensible Bildschirme angezeigt werden, z. B. Abläufe zur Transaktionsbestätigung.
Apps, die Fenster vom Typ TYPE_APPLICATION_OVERLAY anzeigen, sollten Alternativen in Betracht ziehen, die für ihren Anwendungsfall möglicherweise besser geeignet sind, z. B. Bild im Bild oder Bubbles.
Schutz-Flag für die Berechtigung bekannter Signierer
Ab Android 12 können Sie mit dem Attribut knownCerts für Berechtigungen auf Signaturniveau bei der Deklaration auf die Digests bekannter Signaturzertifikate verweisen.
In deiner App kann dieses Attribut deklariert und das Flag knownSigner verwendet werden, damit Geräte und Apps Signaturberechtigungen für andere Apps gewähren können, ohne dass die Apps bei der Herstellung und Auslieferung des Geräts signiert werden müssen.
Attestierung der Geräteeigenschaften
Android 12 erweitert die Gruppe von Apps, die die Geräteeigenschaften in einem Attestierungszertifikat überprüfen können, wenn diese Apps einen neuen Schlüssel generieren.
Ab Android 9 (API-Level 28) können Geräterichtlinieninhaber (DPOs), die Keymaster 4.0 oder höher verwenden, die Geräteeigenschaften in diesen Attestierungszertifikaten überprüfen. Ab Android 12 kann jede App, die auf Android 12 (API-Level 31) oder höher ausgerichtet ist, diese Überprüfung mit der Methode setDevicePropertiesAttestationIncluded() durchführen.
Die generierten Geräteeigenschaften enthalten die folgenden Build-Felder:
BRANDDEVICEMANUFACTURERMODELPRODUCT
Aktionen für Benachrichtigungen auf dem Sperrbildschirm
Ab Android 12 unterstützt die Klasse Notification.Action.Builder die Methode setAuthenticationRequired(), mit der deine App erfordern kann, dass ein Gerät entsperrt ist, bevor deine App eine bestimmte Benachrichtigungsaktion aufruft. Diese Methode bietet eine zusätzliche Sicherheitsebene für Benachrichtigungen auf gesperrten Geräten.
Lokalisierbare Strings für BiometricPrompt
Mit Android 12 werden neue APIs eingeführt, mit denen du die Nutzerfreundlichkeit der biometrischen Authentifizierung in deiner App verbessern kannst. Die neue verschachtelte Klasse BiometricManager.Strings enthält die Methoden getButtonLabel(), getPromptMessage() und getSettingName(), mit denen deine App ein für Nutzer lesbares und lokalisiertes Schaltflächenlabel, eine Aufforderung oder einen App-Einstellungsnamen abrufen kann. Mit diesen Labels kannst du präzisere Anweisungen für Nutzer erstellen, die sich auf die verwendeten biometrischen Authentifizierungsmethoden beziehen, z. B. „Entsperrung per Gesichtserkennung verwenden“ oder „Fingerabdruck verwenden, um fortzufahren“.
Medien
Transcodierung in kompatibles Medienformat
Ab Android 12 (API-Level 31) kann das System auf dem Gerät aufgenommene HEVC(H.265)- und HDR-Videos (HDR10 und HDR10+) automatisch in AVC (H.264) transcodieren, ein Format, das mit Standard-Playern weitgehend kompatibel ist. So werden moderne Codecs verwendet, wenn sie verfügbar sind, ohne dass die Kompatibilität mit älteren Anwendungen beeinträchtigt wird.
Weitere Informationen findest du unter Transcodierung in kompatibles Medienformat.
Leistungsklasse
Mit Android 12 wird ein Standard namens Leistungsklasse eingeführt. Eine Leistungsklasse gibt Hardwarefunktionen an, die über die grundlegenden Anforderungen von Android hinausgehen. Jedes Android-Gerät deklariert die von ihm unterstützte Leistungsklasse. Entwickler können die Leistungsklasse des Geräts zur Laufzeit prüfen und optimierte Funktionen bereitstellen, die die Funktionen des Geräts voll ausschöpfen.
Weitere Informationen finden Sie unter Leistungsklasse.
Verbesserungen bei der Videocodierung
Android 12 definiert einen Standardsatz von Schlüsseln zur Steuerung des Quantisierungsparameters (QP) für die Videocodierung, sodass Entwickler keinen herstellerspezifischen Code verwenden müssen.
Die neuen Schlüssel sind in der MediaFormat API und in der NDK-Mediathek verfügbar.
Ab Android 12 erzwingen Video-Encoder einen Mindestqualitätsschwellenwert. So wird sichergestellt, dass Nutzer beim Codieren von Videos mit hoher Szenenkomplexität keine extrem niedrige Qualität erhalten.
Audiofokus
Wenn eine App ab Android 12 (API-Level 31) den Audiofokus anfordert, während eine andere App den Fokus hat und etwas wiedergibt, blendet das System die Wiedergabe der anderen App aus.
Weitere Informationen findest du unter Audiofokus in Android 12 und höher.
MediaDrm-Updates
So ermitteln Sie, ob für die aktuellen MediaDrm APIs eine sichere Decoderkomponente erforderlich ist:
- Erstellen Sie einen
MediaDrm. - Öffnen Sie eine Sitzung, um eine Sitzungs-ID zu erhalten.
- Erstellen Sie mit der Sitzungs-ID einen
MediaCrypto. - Rufen Sie
MediaCrypto.requiresSecureDecoderComponent(mimeType)an.
Mit den neuen Methoden requiresSecureDecoder(@NonNull String mime) und requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level) können Sie dies festlegen, sobald Sie ein MediaDrm erstellen.
Kamera
Camera2-Anbietererweiterungen
Viele unserer Geräteherstellerpartner haben benutzerdefinierte Kameraerweiterungen wie Bokeh, HDR, Nachtmodus und andere entwickelt, die sie in Apps verwenden möchten, um auf ihren Geräten ein differenziertes Erlebnis zu bieten. Die CameraX-Bibliothek unterstützt diese benutzerdefinierten Anbietererweiterungen bereits. In Android 12 werden diese Anbietererweiterungen jetzt direkt in der Plattform verfügbar gemacht.
Diese Ergänzung hilft Apps mit komplexen Camera2-Implementierungen, Anbietererweiterungen zu nutzen, ohne dass wesentliche Änderungen am Legacy-Code vorgenommen werden müssen. Die Camera2 Extension APIs stellen genau dieselben Erweiterungen wie CameraX bereit. Diese werden bereits auf vielen verschiedenen Geräten unterstützt, sodass du sie ohne zusätzliche Konfiguration verwenden kannst.
Weitere Informationen finden Sie unter CameraExtensionCharacteristics.
Unterstützung für Quad-Bayer-Kamerasensoren
Viele Android-Geräte sind heute mit Kamerasensoren mit ultrahoher Auflösung ausgestattet, die in der Regel Quad- oder Nona-Bayer-Muster verwenden. Diese bieten eine hohe Flexibilität in Bezug auf die Bildqualität und die Leistung bei schlechten Lichtverhältnissen. Mit Android 12 werden neue Plattform-APIs eingeführt, mit denen Drittanbieter-Apps diese vielseitigen Sensoren optimal nutzen können. Die neuen APIs unterstützen das einzigartige Verhalten dieser Sensoren und berücksichtigen, dass sie im Modus „volle Auflösung“ oder „maximale Auflösung“ im Vergleich zum Standardmodus möglicherweise andere Streamkonfigurationen und -kombinationen unterstützen.
Grafiken und Bilder
Apps direkten Zugriff auf Tombstone-Traces gewähren
Ab Android 12 können Sie über die Methode ApplicationExitInfo.getTraceInputStream() als Protokollzwischenspeicher auf den Tombstone des nativen Absturzes Ihrer App zugreifen. Der Protokollzwischenspeicher wird mit diesem Schema serialisiert.
Bisher war der Zugriff auf diese Informationen nur über die Android Debug Bridge (ADB) möglich.
Weitere Informationen findest du unter Apps direkten Zugriff auf Tombstone-Traces gewähren.
Unterstützung von AVIF-Bildern
Android 12 unterstützt Bilder im AV1-Bilddateiformat (AVIF). AVIF ist ein Containerformat für Bilder und Bildsequenzen, die mit AV1 codiert sind. AVIF nutzt die Intra-Frame-codierten Inhalte aus der Videokomprimierung. Dadurch wird die Bildqualität bei gleicher Dateigröße im Vergleich zu älteren Bildformaten wie JPEG erheblich verbessert. Ausführliche Informationen zu den Vorteilen dieses Formats finden Sie im Blogpost von Jake Archibald.
Einfachere Unschärfe, Farbfilter und andere Effekte
Android 12 bietet die neue RenderEffect, mit der gängige Grafikeffekte wie Unschärfe, Farbfilter, Android-Shader-Effekte und mehr auf Views und Rendering-Hierarchien angewendet werden können. Effekte können entweder als Ketteneffekte (die einen inneren und einen äußeren Effekt umfassen) oder als gemischte Effekte kombiniert werden. Aufgrund der begrenzten Rechenleistung wird die Funktion möglicherweise nicht von allen Android-Geräten unterstützt.
Effekte können auch auf die zugrunde liegende RenderNode für Views angewendet werden, indem View.setRenderEffect(RenderEffect) aufgerufen wird.
So implementieren Sie eine RenderEffect:
view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))
Native Decodierung animierter Bilder
In Android 12 wurde die NDK-API ImageDecoder erweitert, um alle Frames und Timing-Daten aus Bildern zu decodieren, die die animierten Dateiformate GIF und WebP verwenden. Als diese API in Android 11 eingeführt wurde, decodierte sie nur das erste Bild aus Animationen in diesen Formaten.
Verwenden Sie ImageDecoder anstelle von Drittanbieterbibliotheken, um die APK-Größe weiter zu reduzieren und von zukünftigen Sicherheits- und Leistungsupdates zu profitieren.
Weitere Informationen zur API finden Sie in der API-Referenz und im Beispiel auf GitHub.
Verbindung
Companion-Apps aktiv halten
Damit Companion-Apps weiterhin ausgeführt werden können, um das Gerät zu verwalten, werden in Android 12 APIs eingeführt, die Folgendes tun:
- Ermöglicht es, eine App zu aktivieren, wenn sich ein Companion-Gerät in Reichweite befindet.
- Sicherstellen, dass der Prozess weiter ausgeführt wird, solange sich das Gerät in Reichweite befindet.
Damit du die APIs verwenden kannst, müssen deine Geräte über den Companion Device Manager verbunden sein. Weitere Informationen finden Sie unter CompanionDeviceManager.startObservingDevicePresence() und CompanionDeviceService.onDeviceAppeared().
Companion Device Manager-Profile
Partner-Apps auf Android 12 (API-Level 31) und höher können Companion-Geräteprofile verwenden, wenn sie eine Verbindung zu einer Smartwatch herstellen. Durch die Verwendung eines Profils wird der Registrierungsprozess vereinfacht, da die Erteilung einer Reihe von gerätetypspezifischen Berechtigungen in einem Schritt zusammengefasst wird.
Die gebündelten Berechtigungen werden der Companion-App gewährt, sobald das Gerät verbunden ist, und gelten nur, solange das Gerät verknüpft ist. Wenn Sie die App löschen oder die Verknüpfung entfernen, werden die Berechtigungen entfernt.
Weitere Informationen finden Sie unter AssociationRequest.Builder.setDeviceProfile().
Verbesserungen bei der Bandbreitenschätzung
In Android 12 wurden die Funktionen zur Bandbreitenschätzung von getLinkDownstreamBandwidthKbps() und getLinkUpstreamBandwidthKbps() sowohl für WLAN- als auch für Mobilfunkverbindungen verbessert. Die zurückgegebenen Werte stellen jetzt den gewichteten durchschnittlichen Durchsatz des Nutzers pro Mobilfunkanbieter oder WLAN-SSID, Netzwerktyp und Signalstärke für alle Anwendungen auf dem Gerät dar.
Dies kann eine genauere und realistischere Schätzung des erwarteten Durchsatzes liefern, Schätzungen für einen Kaltstart Ihrer Anwendung liefern und erfordert im Vergleich zu anderen Methoden zur Durchsatzschätzung weniger Zyklen.
Verbesserungen bei Wi-Fi Aware (NAN)
Android 12 bietet einige Verbesserungen für Wi-Fi Aware:
- Auf Geräten mit Android 12 (API-Level 31) und höher können Sie den Callback
onServiceLost()verwenden, um benachrichtigt zu werden, wenn Ihre App einen erkannten Dienst verloren hat, weil der Dienst beendet wurde oder sich außerhalb der Reichweite befindet. - Die Einrichtung mehrerer Datenpfade (NAN-Datenpfade) wird effizienter gestaltet. In früheren Versionen wurden L2-Nachrichten verwendet, um Peer-Informationen der Initiatoren auszutauschen, was zu Latenz führte. Auf Geräten mit Android 12 und höher kann der Responder (Server) so konfiguriert werden, dass er jeden Peer akzeptiert. Das bedeutet, dass er die Informationen des Initiators nicht im Voraus kennen muss. Dadurch wird die Bereitstellung des Datenpfads beschleunigt und mehrere Punkt-zu-Punkt-Verbindungen mit nur einer Netzwerkanfrage ermöglicht.
- Damit das Framework Such- oder Verbindungsanfragen nicht aufgrund fehlender Ressourcen ablehnt, kannst du auf Geräten mit Android 12 und höher
WifiAwareManager.getAvailableAwareResources()aufrufen. Mit dem Rückgabewert dieser Methode können Sie die Anzahl der verfügbaren Datenpfade, die Anzahl der verfügbaren Veröffentlichungssitzungen und die Anzahl der verfügbaren Abositzungen abrufen.
Gleichzeitige Peer-to-Peer- und Internetverbindung
Wenn Geräte, die auf Android 12 (API-Level 31) und höher ausgerichtet sind, auf Geräten mit Hardwareunterstützung ausgeführt werden, wird die bestehende WLAN-Verbindung beim Herstellen der Verbindung zum Peer-Gerät nicht getrennt, wenn Peer-to-Peer-Verbindungen verwendet werden. Mit WifiManager.isMultiStaConcurrencySupported() können Sie prüfen, ob dieses Feature unterstützt wird.
NFC-Zahlungen bei ausgeschaltetem Display aktivieren
In Apps, die auf Android 12 und höher ausgerichtet sind, können Sie NFC-Zahlungen aktivieren, ohne dass das Display des Geräts eingeschaltet sein muss. Setzen Sie dazu requireDeviceScreenOn auf false. Weitere Informationen zu NFC-Zahlungen bei ausgeschaltetem oder gesperrtem Bildschirm findest du unter Verhalten bei ausgeschaltetem und gesperrtem Bildschirm.
Speicher
In Android 12 werden die folgenden Funktionen zur Speicherverwaltung eingeführt:
- Media-Store-Unterstützung für
MediaDocumentsProvider, wenn Ihre App einen Medien-URI abruft, der einem bestimmten Dokumentanbieter-URI entspricht. - Ein Verzeichnis für Sprachaufnahmen.
- Die Berechtigung
MANAGE_MEDIA, mit der eine App Medienverwaltungsvorgänge ausführen kann, ohne dem Nutzer für jeden Vorgang ein Bestätigungsdialogfeld anzuzeigen. - Apps, die sowohl die Berechtigung
MANAGE_EXTERNAL_STORAGEals auch die BerechtigungQUERY_ALL_PACKAGEShaben, z. B. Apps zur Dateiverwaltung, können eine benutzerdefinierte Aktivität aufrufen, um den Speicherplatz einer anderen App zu verwalten, sofern die andere App die benutzerdefinierte Aktivität erstellt.
Hauptfunktion
Automatische App-Updates
In Android 12 wird die Methode setRequireUserAction() für Apps eingeführt, die die PackageInstaller API verwenden.
Mit dieser Methode können Installations-Apps App-Updates ausführen, ohne dass der Nutzer die Aktion bestätigen muss.
Informationen zum Chipsatz des Geräts
In Android 12 werden android.os.Build zwei Konstanten hinzugefügt, die die Informationen zum SoC-Chipsatzanbieter und ‑modell über das SDK verfügbar machen. Sie können diese Informationen durch Aufrufen von Build.SOC_MANUFACTURER bzw. Build.SOC_MODEL abrufen.
Aktualisierungen der wichtigsten Java APIs
Aufgrund von Anfragen und der Zusammenarbeit mit Entwicklern haben wir in Android 12 die folgenden Kernbibliotheken hinzugefügt:
| Klasse | APIs |
|---|---|
java.lang.Deprecated
|
|
java.lang.Byte
|
|
java.lang.Short
|
|
java.lang.Math
|
|
java.lang.StrictMath
|
|
java.util.Set
|
copyOf()
|
java.util.Map
|
copyOf()
|
java.util.List
|
copyOf()
|
java.time.Duration
|
|
java.time.LocalTime
|