Android 9-Funktionen und -APIs

Android 9 (API-Level 28) bietet großartige neue Funktionen für Nutzer und Entwickler. In diesem Dokument wird erläutert, was es für Entwickler Neues gibt.

Informationen zu den neuen APIs finden Sie im Bericht „API-Unterschiede“ oder in der Android API-Referenz. Du solltest dir außerdem die Verhaltensänderungen bei Android 9 ansehen, um zu erfahren, in welchen Bereichen sich Plattformänderungen auf deine Apps auswirken können.

Positionierung im Innenbereich mit WLAN-RTT

Neue RTT-APIs unterstützen die Positionierung in Innenräumen in deinen Apps.

Android 9 unterstützt das Wi-Fi-Protokoll IEEE 802.11-2016, das auch als Wi-Fi Round-Trip-Time (RTT) bezeichnet wird. Damit können Sie in Ihren Apps von der Positionierung in Innenräumen profitieren.

Auf Geräten mit Android 9 und Hardwareunterstützung können deine Apps die RTT APIs verwenden, um die Entfernung zu RTT-fähigen WLAN-Zugangspunkten in der Nähe zu messen. Auf dem Gerät müssen die Standortdienste und die WLAN-Suche aktiviert sein (unter Einstellungen > Standort) und Ihre App die Berechtigung ACCESS_FINE_LOCATION haben. Das Gerät muss keine Verbindung zu den Zugangspunkten herstellen, um RTT zu verwenden. Aus Datenschutzgründen kann nur das Smartphone die Entfernung zum Zugangspunkt ermitteln. Die Zugangspunkte haben diese Informationen nicht.

Wenn Ihr Gerät die Entfernung zu drei oder mehr Zugangspunkten misst, können Sie mit einem Multilaterationsalgorithmus die Geräteposition schätzen, die am besten zu diesen Messungen passt. Das Ergebnis ist normalerweise auf 1 bis 2 Meter genau.

Mit dieser Genauigkeit können Sie neue Umgebungen schaffen, z. B. eine integrierte Navigation und detailgenaue standortbezogene Dienste wie die eindeutige Sprachsteuerung (z. B. „Schalte dieses Licht einschalten“) und standortbasierte Informationen (z. B. „Gibt es für dieses Produkt Sonderangebote?“).

Sehen Sie sich die verwendete WLAN RTT API in der Demo-App für Android WifiRttScan an.

Weitere Informationen finden Sie unter WLAN-Standort: Entfernung mit RTT.

Unterstützung für Display-Aussparungen

Bildschirm mit Entwickleroptionen mit verschiedenen Ausschnitten

Display-Aussparung mit Emulator testen

Android 9 unterstützt die neuesten randlosen Displays, die Display-Aussparungen für Kameras und Lautsprecher enthalten. Mit der Klasse DisplayCutout können Sie Position und Form der nicht funktionsfähigen Bereiche ermitteln, in denen keine Inhalte angezeigt werden sollen. Mit der Methode getDisplayCutout() können Sie feststellen, ob diese Ausschnitte vorhanden und platziert sind.

Mit dem neuen Attribut layoutInDisplayCutoutMode für das Fensterlayout kann der Inhalt Ihrer App um die Ausschnitte eines Geräts angeordnet werden. Sie können für dieses Attribut einen der folgenden Werte festlegen:

So können Sie einen Bildschirmausschnitt auf jedem Gerät oder Emulator mit Android 9 simulieren:

  1. Aktivieren Sie Entwickleroptionen.
  2. Scrollen Sie auf dem Bildschirm Entwickleroptionen nach unten zum Abschnitt Zeichnung und wählen Sie Anzeige mit Ausschnitt simulieren aus.
  3. Wählen Sie die Größe des Ausschnitts aus.

Benachrichtigungen

In Android 9 wurden mehrere Verbesserungen für Benachrichtigungen eingeführt, die alle für Entwickler mit API-Level 28 oder höher verfügbar sind.

Benachrichtigungen zu Nachrichten

MessagingStyle mit angehängtem Foto.

Messaging-Benachrichtigung

Nachrichtenstil mit Antworten und Unterhaltungen.

Beispielcode, der Benachrichtigungen verwendet, einschließlich Funktionen von Android 9, finden Sie im People Beispiel.

Verbesserte Nachrichtenfunktion

Ab Android 7.0 (API-Level 24) konnten Sie eine Aktion hinzufügen, mit der Sie auf Nachrichten antworten oder anderen Text direkt aus einer Benachrichtigung eingeben können. Unter Android 9 wurde diese Funktion um folgende Verbesserungen erweitert:

  • Vereinfachte Unterstützung für Teilnehmer von Unterhaltungen: Mit der Klasse Person werden an einer Unterhaltung beteiligte Personen, einschließlich ihrer Avatare und URIs, identifiziert. Viele andere APIs wie addMessage() nutzen jetzt die Person-Klasse anstelle von CharSequence. Die Klasse Person unterstützt auch das Builder-Designmuster.

  • Unterstützung von Bildern: Unter Android 9 werden jetzt in den Nachrichtenbenachrichtigungen auf Smartphones Bilder angezeigt. Sie können setData() für die Nachricht verwenden, um ein Bild anzuzeigen. Das folgende Code-Snippet zeigt, wie ein Person und eine Nachricht mit einem Bild erstellt werden.

Kotlin

// Create new Person.
val sender = Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build()
// Create image message.
val message = Message("Picture", time, sender)
        .setData("image/", imageUri)
val style = Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message)

Java

// Create new Person.
Person sender = new Person()
        .setName(name)
        .setUri(uri)
        .setIcon(null)
        .build();
// Create image message.
Message message = new Message("Picture", time, sender)
        .setData("image/", imageUri);
Notification.MessagingStyle style = new Notification.MessagingStyle(getUser())
        .addMessage("Check this out!", 0, sender)
        .addMessage(message);
  • Antworten als Entwurf speichern: Deine App kann die vom System gesendeten EXTRA_REMOTE_INPUT_DRAFT abrufen, wenn ein Nutzer versehentlich eine Benachrichtigung schließt. Mit diesem Extra kannst du Textfelder in der App im Voraus ausfüllen, damit Nutzer ihre Antwort fertigstellen können.

  • Erkennen, ob eine Unterhaltung eine Gruppenunterhaltung ist: Mit setGroupConversation() können Sie eine Unterhaltung gezielt als Gruppenunterhaltung oder Nicht-Gruppenunterhaltung identifizieren.

  • Semantische Aktion für einen Intent festlegen: Mit der Methode setSemanticAction() können Sie einer Aktion eine semantische Bedeutung zuweisen, z. B. „Als gelesen markieren“, „Löschen“, „Antworten“ usw.

  • Intelligente Antwort: Android 9 unterstützt dieselben vorgeschlagenen Antworten wie in der Nachrichten-App. Mit RemoteInput.setChoices() kannst du dem Nutzer verschiedene Standardantworten zur Verfügung stellen.

Kanaleinstellungen, Nachrichten an alle und „Bitte nicht stören“

Mit Android 8.0 wurden Benachrichtigungskanäle eingeführt, mit denen Sie einen benutzerdefinierbaren Kanal für jeden anzuzeigenden Benachrichtigungstyp erstellen können. Unter Android 9 werden die Einstellungen für Benachrichtigungskanäle durch diese Änderungen vereinfacht:

  • Channelgruppen blockieren: Nutzer können jetzt ganze Gruppen von Kanälen in den Benachrichtigungseinstellungen für eine App blockieren. Mit der Methode isBlocked() können Sie feststellen, wann eine Gruppe blockiert ist, und folglich keine Benachrichtigungen für Kanäle in dieser Gruppe senden.

    Außerdem kann Ihre App mit der neuen Methode getNotificationChannelGroup() die aktuellen Einstellungen für Channelgruppen abfragen.

  • Neue Broadcast-Intent-Typen: Das Android-System sendet jetzt Broadcast-Intents, wenn sich der Blockierungsstatus von Benachrichtigungskanälen und Channelgruppen ändert. Die App, die Inhaber des blockierten Kanals oder der blockierten Gruppe ist, kann diese Intents überwachen und entsprechend reagieren. Weitere Informationen zu diesen Intent-Aktionen und -Extras finden Sie in der Liste der aktualisierten Konstanten in der Referenz zu NotificationManager. Informationen zum Reagieren auf Broadcast-Intents finden Sie unter Broadcasts.

  • Für NotificationManager.Policy gibt es drei neue „Bitte nicht stören“-Prioritätskategorien:

  • NotificationManager.Policy hat außerdem sieben neue „Nicht stören“-Konstanten, mit denen visuelle Unterbrechungen unterdrückt werden können:

Unterstützung für mehrere Kameras und Updates für Kameras

Auf Geräten mit Android 9 können Sie von zwei oder mehr physischen Kameras gleichzeitig auf Streams zugreifen. Auf Geräten mit zwei Front- oder Dual-Back-Kameras können Sie innovative Funktionen schaffen, die mit nur einer Kamera nicht möglich sind, z. B. nahtloses Zoomen, Bokeh und Stereovision. Mit der API können Sie auch einen logischen oder fusionierten Kamerastream aufrufen, der automatisch zwischen zwei oder mehr Kameras wechselt.

Zu den weiteren Verbesserungen für die Kamera gehören zusätzliche Sitzungsparameter, mit denen Verzögerungen bei der ersten Aufnahme reduziert werden können, sowie die Freigabe der Oberfläche, mit der Kameraclients verschiedene Anwendungsfälle bearbeiten können, ohne das Kamerastreaming zu stoppen und zu starten. Außerdem wurden APIs für die displaybasierte Flash-Unterstützung und den Zugriff auf OIS-Zeitstempel für die Bildstabilisierung und Spezialeffekte auf App-Ebene hinzugefügt.

In Android 9 unterstützt die API mit mehreren Kameras einfarbige Kameras für Geräte mit der Funktion FULL oder LIMITED. Die monochrome Ausgabe erfolgt über das YUV_420_888-Format mit Y als Graustufe, U (Cb) als 128 und V (Cr) als 128.

Mit Android 9 wird auch die Unterstützung für externe USB/UVC-Kameras auf unterstützten Geräten ermöglicht.

ImageDecoder für Drawables und Bitmaps

In Android 9 wird die Klasse ImageDecoder eingeführt, die einen modernisierten Ansatz zum Decodieren von Bildern bietet. Verwenden Sie diese Klasse anstelle der BitmapFactory und BitmapFactory.Options APIs.

Mit ImageDecoder können Sie einen Drawable oder einen Bitmap aus einem Bytezwischenspeicher, einer Datei oder einem URI erstellen. Um ein Bild zu decodieren, müssen Sie zuerst createSource() mit der Quelle des codierten Bilds aufrufen. Rufen Sie dann decodeDrawable() oder decodeBitmap() auf, indem Sie das Objekt ImageDecoder.Source übergeben, um ein Drawable oder Bitmap zu erstellen. Übergeben Sie OnHeaderDecodedListener an decodeDrawable() oder decodeBitmap(), um die Standardeinstellungen zu ändern. ImageDecoder ruft onHeaderDecoded() mit der Standardbreite und -höhe des Bildes auf, sobald diese bekannt sind. Wenn das codierte Bild ein animiertes GIF oder WebP ist, gibt decodeDrawable() einen Drawable zurück, der eine Instanz der AnimatedImageDrawable-Klasse ist.

Es gibt verschiedene Methoden, um Bildeigenschaften festzulegen:

  • Wenn Sie das decodierte Bild auf eine genaue Größe skalieren möchten, übergeben Sie die Zielabmessungen in setTargetSize(). Sie können Bilder auch anhand einer Stichprobengröße skalieren. Übergeben Sie die Stichprobengröße direkt an setTargetSampleSize().
  • Wenn Sie ein Bild innerhalb des Bereichs des skalierten Bildes zuschneiden möchten, rufen Sie setCrop() auf.
  • Übergeben Sie true an setMutableRequired(), um eine änderbare Bitmap zu erstellen.

Mit ImageDecoder können Sie einem Bild auch angepasste und komplizierte Effekte hinzufügen, z. B. abgerundete Ecken oder kreisförmige Masken. Verwenden Sie setPostProcessor() mit einer Instanz der PostProcessor-Klasse, um beliebige Zeichenbefehle auszuführen.

Animation

In Android 9 wird die Klasse AnimatedImageDrawable zum Zeichnen und Anzeigen von animierten GIF- und WebP-Bildern eingeführt. AnimatedImageDrawable funktioniert ähnlich wie AnimatedVectorDrawable, da der Rendering-Thread die Animationen von AnimatedImageDrawable steuert. Der Rendering-Thread verwendet auch einen Worker-Thread zum Decodieren, damit er andere Vorgänge im Renderingthread nicht beeinträchtigt. Mit dieser Implementierung kann Ihre App ein animiertes Bild anzeigen, ohne ihre Updates zu verwalten oder andere Ereignisse im UI-Thread der App zu beeinträchtigen.

Ein AnimatedImageDrawable kann mithilfe einer Instanz von ImageDecoder decodiert werden. Das folgende Code-Snippet zeigt, wie Sie mit ImageDecoder Ihr AnimatedImageDrawable-Element decodieren:

Kotlin

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

Java

private void decodeImage() throws IOException {
    Drawable decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(getResources(), R.drawable.my_drawable));

    if (decodedAnimation instanceof AnimatedImageDrawable) {
        // Prior to start(), the first frame is displayed.
        ((AnimatedImageDrawable) decodedAnimation).start();
    }
}

ImageDecoder bietet mehrere Methoden, mit denen Sie das Image weiter verändern können. Mit der Methode setPostProcessor() können Sie beispielsweise das Aussehen des Bildes ändern, z. B. mit einer Kreismaske oder abgerundeten Ecken.

HDR VP9 Video, HEIF-Bildkomprimierung und Medien-APIs

Android 9 bietet integrierte Unterstützung für High Dynamic Range (HDR) VP9 Profil 2, sodass du deinen Nutzern HDR-fähige Filme über YouTube, Play Filme und andere Quellen auf HDR-fähigen Geräten zur Verfügung stellen kannst.

Android 9 unterstützt außerdem die Codierung von Bildern im High Efficiency Image File Format (HEIF oder HEIC), das die Komprimierung verbessert und Speicherplatz und Netzwerkdatennutzung reduziert. Beispiele für HEIF-Standbilder werden in den Klassen MediaMuxer und MediaExtractor unterstützt. Dank der Plattformunterstützung auf Android 9-Geräten können Sie HEIF-Bilder ganz einfach von Ihrem Back-End-Server senden und verwenden. Nachdem Sie sich vergewissert haben, dass Ihre App mit diesem Datenformat für die Freigabe und Anzeige kompatibel ist, probieren Sie HEIF als Bildspeicherformat in Ihrer App aus. Sie können eine JPEG-zu-Heic-Konvertierung mit ImageDecoder oder BitmapFactory durchführen, bei der eine Bitmap aus einer JPEG-Datei abgerufen wird. Sie können dann HeifWriter verwenden, um HEIF-Standbilder aus YUV-Bytezwischenspeichern oder Instanzen von Surface oder Bitmap zu schreiben.

Medienmesswerte sind auch in den Klassen AudioTrack, AudioRecord und MediaDrm verfügbar.

In Android 9 werden Methoden für die MediaDRM-Klasse eingeführt, um Messwerte, HDCP-Ebenen, Sicherheitsstufen und die Anzahl der Sitzungen zu erhalten und mehr Kontrolle über Sicherheitsebenen und sichere Stopps zu bieten. Weitere Informationen finden Sie im Bericht „API-Unterschiede“.

In Android 9 unterstützt die AAudio API mehrere zusätzliche AAudioStream-Attribute, darunter Nutzung, Inhaltstyp und Eingabevoreinstellung. Mit diesen Attributen können Sie Streams erstellen, die für VoIP- oder Camcorder-Anwendungen optimiert sind. Sie können die Sitzungs-ID auch festlegen, um einen AAudio-Stream mit einem Submix zu verknüpfen, der Effekte enthalten kann. Mit der AudioEffect API können Sie die Auswirkungen steuern.

In Android 9 wird die AudioEffect API für die Dynamikverarbeitung eingeführt. Mit dieser Klasse können Sie kanalbasierte Audioeffekte – einschließlich Entzerrung, Multiband-Komprimierung und Limiter – über mehrere Stufen hinweg erstellen. Die Anzahl der Bänder und aktiven Phasen ist konfigurierbar und die meisten Parameter können in Echtzeit gesteuert werden.

Vertraulichkeit der Datenkosten in JobScheduler

Ab Android 9 kann JobScheduler von Mobilfunkanbietern bereitgestellte Netzwerkstatussignale verwenden, um die Verarbeitung netzwerkbezogener Aufträge zu verbessern.

Jobs können die geschätzte Datengröße und den Signal-Vorabruf sowie detaillierte Netzwerkanforderungen angeben. JobScheduler verwaltet dann die Arbeit entsprechend dem Netzwerkstatus. Wenn beispielsweise das Netzwerk signalisiert, dass es überlastet ist, kann JobScheduler große Netzwerkanfragen verschieben. In einem kostenlosen Netzwerk kann JobScheduler Prefetch-Jobs ausführen, um die Nutzerfreundlichkeit zu verbessern, z. B. indem Anzeigentitel vorab abgerufen werden.

Verwenden Sie beim Hinzufügen von Jobs gegebenenfalls setEstimatedNetworkBytes(), setPrefetch() und setRequiredNetwork(), damit JobScheduler die Arbeit ordnungsgemäß ausführen kann. Verwenden Sie für die Ausführung des Jobs das von JobParameters.getNetwork() zurückgegebene Objekt Network. Andernfalls verwenden Sie implizit das Standardnetzwerk des Geräts, das Ihre Anforderungen möglicherweise nicht erfüllt, was zu unbeabsichtigter Datennutzung führt.

Neural Networks API 1.1

Die Neural Networks API wurde in Android 8.1 (API-Level 27) eingeführt, um das maschinelle Lernen auf dem Gerät zu beschleunigen. Android 9 erweitert und verbessert die API und unterstützt neun neue Vorgänge:

Bekanntes Problem:Wenn Sie ANEURALNETWORKS_TENSOR_QUANT8_ASYMM-Tensoren an den Vorgang ANEURALNETWORKS_PAD übergeben, der unter Android 9 und höher verfügbar ist, stimmt die Ausgabe von NNAPI möglicherweise nicht mit der Ausgabe von übergeordneten ML-Frameworks wie TensorFlow Lite überein. Übergeben Sie stattdessen nur ANEURALNETWORKS_TENSOR_FLOAT32, bis das Problem behoben ist.

Außerdem wird mit der API die neue Funktion ANeuralNetworksModel_relaxComputationFloat32toFloat16() eingeführt, mit der Sie angeben können, ob ANEURALNETWORKS_TENSOR_FLOAT32 mit einem Bereich und einer Genauigkeit berechnet werden soll, die bzw. die im 16-Bit-Gleitkommaformat von IEEE 754 gering sind.

AutoFill-Framework

Android 9 bietet mehrere Verbesserungen, die Autofill-Dienste implementieren können, um die Nutzerfreundlichkeit beim Ausfüllen von Formularen weiter zu verbessern. Weitere Informationen zur Verwendung von Autofill-Funktionen in Ihrer App finden Sie im Leitfaden Autofill-Framework.

Erhöhte Sicherheit

Android 9 bietet eine Reihe von Sicherheitsfunktionen, die in den folgenden Abschnitten zusammengefasst werden:

Android geschützte Bestätigung

Bei unterstützten Geräten mit Android 9 oder höher können Sie die geschützte Bestätigung von Android verwenden. Bei Verwendung dieses Workflows wird der Nutzer in Ihrer App aufgefordert, eine kurze Erklärung zu genehmigen. Mit dieser Anweisung kann die App noch einmal bestätigen, dass der Nutzer eine vertrauliche Transaktion ausführen möchte, z. B. eine Zahlung.

Wenn der Nutzer die Anweisung akzeptiert, empfängt und speichert Android Keystore eine kryptografische Signatur, die durch einen Keyed-Hash Message Authentication Code (HMAC) geschützt ist. Nachdem der Android Keystore die Gültigkeit der Nachricht bestätigt hat, kann deine Anwendung den von trustedConfirmationRequired in der vertrauenswürdigen Ausführungsumgebung (Trusted Execution Environment, TEE) generierten Schlüssel zum Signieren der Nachricht verwenden, die der Nutzer akzeptiert hat. Die Signatur zeigt mit sehr hoher Sicherheit an, dass der Nutzer die Anweisung gesehen und ihr zugestimmt hat.

Achtung : Die geschützte Bestätigung von Android bietet keinen sicheren Informationskanal für den Nutzer. Ihre App darf keine Vertraulichkeitsgarantien übernehmen, die über die von der Android-Plattform angebotenen Gewährleistung hinausgehen. Verwende diesen Workflow insbesondere nicht, um vertrauliche Informationen anzuzeigen, die normalerweise nicht auf dem Gerät des Nutzers angezeigt werden würden.

Eine Anleitung zum Hinzufügen der Unterstützung für die geschützte Android-Bestätigung finden Sie im Leitfaden zu Android Protected Bestätigung.

Dialogfeld für einheitliche biometrische Authentifizierung

In Android 9 bietet das System im Namen deiner App Dialogfelder zur biometrischen Authentifizierung. Diese Funktion sorgt für ein standardisiertes Erscheinungsbild und die Platzierung des Dialogfelds, sodass Nutzer sich sicherer fühlen können, dass sie sich über ein vertrauenswürdiges biometrisches Tool zur Prüfung von Anmeldedaten authentifizieren.

Wenn Ihre Anwendung FingerprintManager verwendet, um Nutzern ein Dialogfeld zur Fingerabdruckauthentifizierung anzuzeigen, wechseln Sie zu BiometricPrompt. BiometricPrompt benötigt das System, um das Authentifizierungsdialogfeld anzuzeigen. Außerdem wird das Verhalten an die Art der biometrischen Authentifizierung angepasst, die der Nutzer ausgewählt hat.

Hardware-Sicherheitsmodul

Unterstützte Geräte, auf denen Android 9 oder höher installiert ist, können einen StrongBox Keymaster haben. Das ist eine Implementierung des Keymaster-HAL, die sich in einem Hardware-Sicherheitsmodul befindet. Das Modul enthält Folgendes:

  • Seine eigene CPU.
  • Sicherer Speicher
  • Ein echter Zufallszahlengenerator.
  • Zusätzliche Mechanismen zum Schutz vor Paketmanipulation und nicht autorisiertem Sideloading von Apps.

Beim Prüfen von Schlüsseln, die im StrongBox-Keymaster gespeichert sind, bestätigt das System die Integrität eines Schlüssels mit der vertrauenswürdigen Ausführungsumgebung (Trusted Execution Environment, TEE).

Weitere Informationen zur Verwendung von Strongbox Keymaster finden Sie unter Hardware-Sicherheitsmodul.

Import von sicherem Schlüssel in den Schlüsselspeicher

Android 9 bietet zusätzliche Sicherheit bei der Schlüsselentschlüsselung, da verschlüsselte Schlüssel mithilfe eines ASN.1-codierten Schlüsselformats sicher in den Schlüsselspeicher importiert werden können. Der Keymaster entschlüsselt die Schlüssel dann im Schlüsselspeicher, sodass der Inhalt der Schlüssel im Hostspeicher des Geräts nie als Klartext angezeigt wird.

Weitere Informationen zum sicheren Importieren von verschlüsselten Schlüsseln

APK-Signaturschema mit Schlüsselrotation

Android 9 unterstützt jetzt das APK-Signaturschema v3. Bei diesem Schema kann für jedes Signaturzertifikat ein Rotationsnachweis im Signaturblock eingefügt werden. Mit dieser Funktion kann Ihre App mit einem neuen Signaturzertifikat signiert werden, indem die früheren Signaturzertifikate der APK-Datei mit demjenigen verknüpft werden, mit dem sie jetzt signiert ist.

Weitere Informationen zum Rotieren von Schlüsseln mit apksigner.

Option, die Entschlüsselung des Schlüssels nur auf entsperrten Geräten zuzulassen

In Android 9 wird das Flag unlockedDeviceRequired eingeführt. Mit dieser Option wird festgelegt, ob für den Schlüsselspeicher der Bildschirm entsperrt werden muss, bevor die Entschlüsselung aktiver oder gespeicherter Daten mit dem angegebenen Schlüssel zugelassen wird. Diese Schlüsseltypen eignen sich gut zum Verschlüsseln sensibler Daten wie Gesundheits- oder Unternehmensdaten, die auf einem Laufwerk gespeichert werden sollen. Das Flag bietet Nutzern eine höhere Sicherheit, dass die Daten nicht entschlüsselt werden können, während das Gerät gesperrt ist, falls ihr Smartphone verloren geht oder gestohlen wird.

Damit ein Schlüssel bei gesperrtem Gerät nicht entschlüsselt werden kann, aktivieren Sie das Flag. Dazu übergeben Sie true an die Methode setUnlockedDeviceRequired(). Nach Abschluss dieses Schritts schlagen alle Versuche fehl, Daten mit diesem Schlüssel zu entschlüsseln oder zu signieren, wenn der Bildschirm des Nutzers gesperrt ist. Ein gesperrtes Gerät erfordert eine PIN, ein Passwort, einen Fingerabdruck oder einen anderen vertrauenswürdigen Faktor, bevor auf das Gerät zugegriffen werden kann.

Unterstützung für Legacy-Verschlüsselung

Android 9-Geräte, die mit Keymaster 4 ausgeliefert werden, unterstützen den Triple-Data-Encryption-Algorithmus, auch Triple DES. Wenn Ihre Anwendung mit Legacy-Systemen zusammenarbeitet, die Triple DES erfordern, sollten Sie diese Art der Chiffre zum Verschlüsseln vertraulicher Anmeldedaten verwenden.

Weitere Informationen dazu, wie Sie Ihre App sicherer machen, finden Sie unter Sicherheit für Android-Entwickler.

Einstellung von WPS

Die Funktion „Wi-Fi Protected Setup“ (WPS) wurde aus Sicherheitsgründen eingestellt.

Android-Sicherungen

Android 9 bietet neue Funktionen und Entwickleroptionen für die Sicherung und Wiederherstellung. Details zu diesen Änderungen finden Sie in den folgenden Abschnitten.

Back-ups der clientseitigen Verschlüsselung

Android 9 unterstützt jetzt die Verschlüsselung von Android-Sicherungen mit einem clientseitigen Secret. Diese Unterstützung ist automatisch aktiviert, wenn die folgenden Bedingungen erfüllt sind:

Wenn diese Datenschutzmaßnahme aktiviert ist, ist die PIN, das Muster oder das Passwort des Geräts erforderlich, um Daten aus den vom Nutzergerät erstellten Sicherungen wiederherzustellen. Weitere Informationen zur Technologie hinter dieser Funktion finden Sie im Whitepaper Google Cloud Key Vault Service.

Gerätebedingungen festlegen, die für die Sicherung erforderlich sind

Wenn Ihre App-Daten vertrauliche Informationen oder Einstellungen enthalten, können Sie mit Android 9 die Gerätebedingungen definieren, unter denen die Daten Ihrer App in die Sicherung des Nutzers aufgenommen werden, z. B. wenn die clientseitige Verschlüsselung aktiviert ist oder eine lokale Übertragung von Gerät zu Gerät stattfindet.

Weitere Informationen zum Sichern von Daten auf Android-Geräten finden Sie unter Datensicherung – Übersicht.

Barrierefreiheit

Android 9 umfasst Verbesserungen des Frameworks für Barrierefreiheit, mit denen du den Nutzern deiner App noch einfacher eine noch bessere Nutzererfahrung bieten kannst.

Navigationssemantik

Mit Attributen, die in Android 9 hinzugefügt wurden, lässt sich einfacher festlegen, wie Bedienungshilfen, insbesondere Screenreader, von einem Bildschirmbereich zum anderen wechseln. Mithilfe dieser Attribute können sehbehinderte Nutzer schnell Text auf der Benutzeroberfläche Ihrer App durchgehen und eine Auswahl treffen.

In einer Shopping-App kann ein Screenreader Nutzern beispielsweise dabei helfen, direkt von einer Angebotskategorie zur nächsten zu wechseln, ohne dass der Screenreader alle Elemente einer Kategorie lesen muss, bevor er zur nächsten übergeht.

Titel des Bereichs „Bedienungshilfen“

In Android 8.1 (API-Level 27) und niedriger können Bedienungshilfen nicht immer feststellen, wann ein bestimmter Bildschirmbereich aktualisiert wurde, z. B. wann eine Aktivität ein Fragment durch ein anderes ersetzt. Bereiche bestehen aus logisch gruppierten, visuell zusammenhängenden UI-Elementen, die in der Regel ein Fragment zusammensetzen.

Unter Android 9 kannst du für diese Bereiche Titel für die Bedienungshilfen oder individuell identifizierbare Titel angeben. Hat ein Bereich einen Titel, erhalten Bedienungshilfen detailliertere Informationen, wenn sich der Bereich ändert. Mit dieser Funktion können Dienste dem Nutzer detailliertere Informationen zu Änderungen in der UI zur Verfügung stellen.

Den Titel eines Bereichs können Sie mit dem Attribut android:accessibilityPaneTitle angeben. Sie können auch den Titel eines UI-Bereichs aktualisieren, der zur Laufzeit ersetzt wird. Verwenden Sie dazu setAccessibilityPaneTitle(). Du kannst beispielsweise einen Titel für den Inhaltsbereich eines Fragment-Objekts angeben.

Überschriftenbasierte Navigation

Wenn in Ihrer App Textinhalte mit logischen Überschriften angezeigt werden, setzen Sie das Attribut android:accessibilityHeading für die Instanzen von View, die diese Überschriften darstellen, auf true. Durch das Hinzufügen dieser Überschriften erlauben Sie Bedienungshilfen, Nutzern dabei zu helfen, direkt von einer Überschrift zur nächsten zu wechseln. Jede Bedienungshilfe kann diese Funktion nutzen, um die UI-Navigation für Nutzer zu verbessern.

Gruppennavigation und -ausgabe

In Screenreadern wurde bisher das Attribut android:focusable verwendet, um zu bestimmen, wann ein ViewGroup oder eine Sammlung von View-Objekten als eine Einheit gelesen werden soll. Auf diese Weise konnten die Nutzenden verstehen, dass die Ansichten logisch zusammengehören.

Unter Android 8.1 und niedriger müssen Sie jedes View-Objekt in einer ViewGroup als nicht fokussierbar und das ViewGroup selbst als fokussierbar markieren. Durch diese Anordnung wurden einige Instanzen von View auf eine Weise als fokussierbar markiert, die die Tastaturnavigation umständlicher machte.

Ab Android 9 kannst du das Attribut android:screenReaderFocusable anstelle des Attributs android:focusable in Situationen verwenden, in denen es unerwünschte Folgen hat, ein fokussierbares View-Objekt zu erstellen. Screenreader fokussieren auf alle Elemente, für die android:screenReaderFocusable oder android:focusable auf true gesetzt wurde.

Praktische Aktionen

Android 9 unterstützt jetzt praktische Aktionen für Nutzer:

Interaktion mit Kurzinfos
Mit zusätzlichen Funktionen im Framework für Barrierefreiheit erhalten Sie Zugriff auf Kurzinfos in der Benutzeroberfläche einer App. Verwenden Sie getTooltipText(), um den Text einer Kurzinfo zu lesen, und ACTION_SHOW_TOOLTIP und ACTION_HIDE_TOOLTIP, um Instanzen von View anzuweisen, ihre Kurzinfos ein- oder auszublenden.
Globale Aktionen hinzugefügt
Mit Android 9 werden zwei zusätzliche Geräteaktionen in der Klasse AccessibilityService unterstützt. Ihr Dienst kann Nutzern mit den Aktionen GLOBAL_ACTION_LOCK_SCREEN bzw. GLOBAL_ACTION_TAKE_SCREENSHOT helfen, ihre Geräte zu sperren und Screenshots zu erstellen.

Details zur Fensteränderung

Mit Android 9 ist es einfacher, Aktualisierungen der Fenster einer App zu verfolgen, wenn eine App mehrere Fenster gleichzeitig neu erstellt. Wenn ein TYPE_WINDOWS_CHANGED-Ereignis eintritt, verwenden Sie die getWindowChanges() API, um festzustellen, wie sich die Fenster geändert haben. Während einer Mehrfensteraktualisierung erzeugt jedes Fenster eine eigene Reihe von Ereignissen. Die Methode getSource() gibt die Stammansicht des Fensters zurück, das jedem Ereignis zugeordnet ist.

Wenn für eine App die Titel des Bedienungshilfenbereichs für ihre View-Objekte definiert wurden, kann der Dienst erkennen, wenn die UI der App aktualisiert wird. Wenn ein TYPE_WINDOW_STATE_CHANGED-Ereignis eintritt, verwenden Sie die von getContentChangeTypes() zurückgegebenen Typen, um festzustellen, wie sich das Fenster geändert hat. Das Framework kann beispielsweise erkennen, wenn ein Bereich einen neuen Titel hat oder ein Bereich verschwunden ist.

Drehung

Um unbeabsichtigte Drehungen zu vermeiden, haben wir einen Modus hinzugefügt, der die aktuelle Ausrichtung auch dann fixiert, wenn sich die Geräteposition ändert. Nutzer können die Rotation bei Bedarf manuell auslösen, indem sie eine Schaltfläche in der Systemleiste drücken.

In den meisten Fällen sind die Auswirkungen auf die Kompatibilität von Apps minimal. Wenn Ihre App jedoch ein benutzerdefiniertes Rotationsverhalten hat oder ungewöhnliche Einstellungen für die Bildschirmausrichtung verwendet, können Probleme auftreten, die zuvor unbemerkt geblieben wären, da die Einstellung für die Nutzerrotation immer auf das Hochformat festgelegt war. Wir empfehlen Ihnen, sich das Rotationsverhalten bei allen wichtigen Aktivitäten Ihrer App anzusehen und dafür zu sorgen, dass alle Einstellungen für die Bildschirmausrichtung weiterhin optimal funktionieren.

Weitere Informationen finden Sie in den zugehörigen Verhaltensänderungen.

Rotierendes Mobilgerät mit neuem Rotationsmodus, in dem Nutzer die Rotation manuell auslösen können

Mit einem neuen Rotationsmodus können Nutzer die Rotation bei Bedarf über eine Schaltfläche in der Systemleiste manuell auslösen.

Text

Android 9 bietet die folgenden textbezogenen Funktionen auf der Plattform:

  • Vorberechneter Text: Die Klasse PrecomputedText verbessert die Text-Rendering-Leistung, da Sie die erforderlichen Informationen im Voraus berechnen und im Cache speichern können. Außerdem kann Ihre Anwendung damit ein Textlayout außerhalb des Hauptthreads ausführen.

  • Lupe: Die Klasse Magnifier ist ein Plattform-Widget, das eine Lupe API bietet, die in allen Apps eine einheitliche Verwendung der Lupe ermöglicht.

  • Smart Linkify: Android 9 verbessert die TextClassifier-Klasse, die maschinelles Lernen nutzt, um einige Entitäten im ausgewählten Text zu identifizieren und Aktionen vorzuschlagen. Mit TextClassifier kann Ihre Anwendung beispielsweise erkennen, dass der Nutzer eine Telefonnummer ausgewählt hat. Ihre App könnte dem Nutzer dann vorschlagen, über diese Nummer zu telefonieren. Die Features in TextClassifier ersetzen die Funktionalität der Linkify-Klasse.

  • Textlayout: Es gibt mehrere praktische Methoden und Attribute, die die Implementierung Ihres UI-Designs erleichtern. Weitere Informationen finden Sie in der Referenzdokumentation zu TextView.

Vorzeitige ART-Konvertierung von DEX-Dateien

Auf Geräten mit Android 9 oder höher optimiert der Voraus-of-Time-Compiler der Android-Laufzeit (ART) komprimierte Dalvik Executable-Format-Dateien (DEX) weiter, indem die DEX-Dateien in einem App-Paket in eine kompaktere Darstellung konvertiert werden. Durch diese Änderung wird Ihre Anwendung schneller gestartet und verbraucht weniger Speicherplatz und RAM.

Von dieser Verbesserung kommen vor allem Low-End-Geräte mit niedrigeren E/A-Geschwindigkeiten des Laufwerks.

System-Tracing auf dem Gerät

Mit Android 9 können Sie System-Traces auf Ihrem Gerät aufzeichnen und einen Bericht dieser Aufzeichnungen mit Ihrem Entwicklungsteam teilen. Dieser Bericht unterstützt mehrere Formate, einschließlich HTML.

Durch das Erfassen dieser Traces können Sie Zeitdaten zu den Prozessen und Threads Ihrer App erfassen und andere Arten global signifikanter Gerätestatus ansehen.

Weitere Informationen zu diesem Tool finden Sie unter System-Tracing auf dem Gerät durchführen.