Funktionen und APIs unter Android 9

Android 9 (API-Level 28) bietet Nutzern und Entwicklern viele neue Funktionen. In diesem Dokument wird beschrieben, was für Entwickler neu ist.

Weitere Informationen zu den neuen APIs finden Sie im API-Diff-Bericht oder in der Android-API-Referenz. Sehen Sie sich auch die Verhaltensänderungen in Android 9 an, um zu erfahren, in welchen Bereichen sich Plattformänderungen auf Ihre Apps auswirken können.

Indoor-Positionierung mit WLAN RTT

Neue RTT-APIs unterstützen die Indoor-Positionierung in Ihren Apps.

Mit Android 9 wird die Plattformunterstützung für das IEEE 802.11-2016-WLAN-Protokoll (auch als Wi-Fi Round-Trip-Time, RTT, bezeichnet) eingeführt, damit Sie die Innenraumpositionierung in Ihren Apps nutzen können.

Auf Geräten mit Android 9 und Hardwareunterstützung können Ihre Apps die RTT-APIs verwenden, um die Entfernung zu WLAN-Zugriffspunkten (APs) in der Nähe zu messen, die RTT unterstützen. Auf dem Gerät müssen die Standortdienste aktiviert und die WLAN-Suche aktiviert sein (unter Einstellungen > Standort). Außerdem muss Ihre App die Berechtigung ACCESS_FINE_LOCATION haben. Das Gerät muss sich nicht mit den Zugangspunkten verbinden, um RTT zu verwenden. Aus Datenschutzgründen kann nur das Smartphone die Entfernung zum Zugriffspunkt ermitteln. Die Zugriffspunkte haben diese Informationen nicht.

Wenn Ihr Gerät die Entfernung zu mindestens drei Zugriffspunkten misst, können Sie einen Multilaterationsalgorithmus verwenden, um die Geräteposition zu schätzen, die am besten zu diesen Messungen passt. Das Ergebnis ist in der Regel auf 1 bis 2 Meter genau.

Mit dieser Genauigkeit können Sie neue Funktionen entwickeln, z. B. Navigation in Gebäuden und standortbezogene Dienste mit hoher Genauigkeit, z. B. eindeutige Sprachsteuerung (z. B. „Schalte dieses Licht an“) und standortbezogene Informationen (z. B. „Gibt es Sonderangebote für dieses Produkt?“).

Die Verwendung der WiFi RTT API wird in der Android WifiRttScan-Demo-App veranschaulicht.

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

Unterstützung von Display-Aussparungen

Bildschirm mit Entwickleroptionen, auf dem verschiedene Größen von Display-Aussparungen zu sehen sind

Displayausschnitt mit dem Emulator testen

Android 9 bietet Unterstützung für die neuesten randlosen Displays mit Display-Aussparungen für Kameras und Lautsprecher. Mit der Klasse DisplayCutout können Sie die Position und Form der nicht funktionalen Bereiche ermitteln, in denen keine Inhalte angezeigt werden sollten. Verwenden Sie die Methode getDisplayCutout(), um die Existenz und Platzierung dieser Ausschnittbereiche zu ermitteln.

Mit dem neuen Fensterlayout-Attribut layoutInDisplayCutoutMode kann Ihre App Inhalte um die Ausschnitte eines Geräts herum anordnen. Sie können dieses Attribut auf einen der folgenden Werte festlegen:

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

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

Benachrichtigungen

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

Benachrichtigungen zu Nachrichten

MessagingStyle mit angehängtem Foto.

Benachrichtigung über Nachrichten

MessagingStyle mit Antworten und Unterhaltung.

Beispielcode für Benachrichtigungen, einschließlich Android 9-Funktionen, finden Sie im People-Beispiel.

Verbesserte Messaging-Funktionen

Ab Android 7.0 (API-Ebene 24) konnten Sie eine Aktion hinzufügen, über die der Nutzer auf Nachrichten antworten oder anderen Text direkt über die Benachrichtigung eingeben konnte. In Android 9 wurde diese Funktion durch die folgenden Verbesserungen erweitert:

  • Vereinfachte Unterstützung für Unterhaltungsteilnehmer: Die Klasse Person wird verwendet, um Personen zu identifizieren, die an einer Unterhaltung beteiligt sind, einschließlich ihrer Avatare und URIs. Viele andere APIs, z. B. addMessage(), verwenden jetzt die Klasse Person anstelle von CharSequence. Die Klasse Person unterstützt auch das Builder-Entwurfsmuster.

  • Unterstützung für Bilder: In Android 9 werden jetzt Bilder in Messaging-Benachrichtigungen auf Smartphones angezeigt. Sie können setData() in der Nachricht verwenden, um ein Bild anzuzeigen. Das folgende Code-Snippet zeigt, wie Sie ein Person und eine Nachricht mit einem Bild erstellen.

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 Entwürfe speichern: Ihre App kann die EXTRA_REMOTE_INPUT_DRAFT abrufen, die vom System gesendet wird, wenn ein Nutzer versehentlich eine Messaging-Benachrichtigung schließt. Mit diesem Extra können Sie Textfelder in der App vorab ausfüllen, damit Nutzer ihre Antwort fertigstellen können.

  • Gruppenunterhaltung erkennen: Mit setGroupConversation() können Sie eine Unterhaltung gezielt als Gruppenunterhaltung oder als Unterhaltung mit nur zwei Personen kennzeichnen.

  • 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“ oder „Antworten“.

  • Smart Reply: Android 9 unterstützt dieselben vorgeschlagenen Antworten, die in Ihrer Messaging-App verfügbar sind. Verwenden Sie RemoteInput.setChoices(), um dem Nutzer eine Reihe von Standardantworten zur Verfügung zu stellen.

Kanaleinstellungen, Übertragungen und „Bitte nicht stören“

Mit Android 8.0 wurden Benachrichtigungskanäle eingeführt. Damit können Sie für jede Art von Benachrichtigung, die Sie anzeigen möchten, einen vom Nutzer anpassbaren Kanal erstellen. In Android 9 wurden die Einstellungen für Benachrichtigungskanäle vereinfacht:

  • Channelgruppen blockieren: Nutzer können jetzt ganze Gruppen von Channels in den Benachrichtigungseinstellungen einer App blockieren. Mit der Methode isBlocked() können Sie ermitteln, wann eine Gruppe blockiert wird, und daher keine Benachrichtigungen für Channels 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 Benachrichtigungschannels und Channelgruppen ändert. Die App, zu der der blockierte Kanal oder die blockierte Gruppe gehört, kann auf diese Intents reagieren. Weitere Informationen zu diesen Intent-Aktionen und Extras finden Sie in der aktualisierten Konstantenliste in der NotificationManager-Referenz. Informationen zum Reagieren auf Broadcast-Intents finden Sie unter Broadcasts.

  • NotificationManager.Policy hat drei neue Prioritätskategorien für den Nicht stören-Modus:

  • NotificationManager.Policy bietet außerdem sieben neue „Bitte nicht stören“-Konstanten, mit denen Sie visuelle Unterbrechungen unterdrücken können:

Unterstützung mehrerer Kameras und Kamera-Updates

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

Weitere Verbesserungen bei der Kamera sind zusätzliche Sitzungsparameter, die dazu beitragen, Verzögerungen bei der ersten Aufnahme zu reduzieren, und die Oberflächenfreigabe, mit der Kameraclienten verschiedene Anwendungsfälle ohne Unterbrechung und Neustart des Kamerastreams bewältigen können. Außerdem haben wir APIs für die Blitzunterstützung auf Displaybasis und den Zugriff auf OIS-Zeitstempel für die Bildstabilisierung auf App-Ebene und Spezialeffekte hinzugefügt.

In Android 9 unterstützt die Multi-Camera API monochrome Kameras für Geräte mit der Funktion FULL oder LIMITED. Die monochrome Ausgabe wird über das Format YUV_420_888 erreicht, wobei Y als Graustufenwert, U (Cb) als 128 und V (Cr) als 128 verwendet werden.

Android 9 bietet auf unterstützten Geräten auch Unterstützung für externe USB-/UVC-Kameras.

ImageDecoder für Drawables und Bitmaps

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

Mit ImageDecoder können Sie ein Drawable oder ein Bitmap aus einem Bytepuffer, einer Datei oder einem URI erstellen. Um ein Bild zu decodieren, rufen Sie zuerst createSource() mit der Quelle des codierten Bildes auf. Rufen Sie dann decodeDrawable() oder decodeBitmap() auf und übergeben Sie das ImageDecoder.Source-Objekt, um ein Drawable- oder ein Bitmap-Objekt zu erstellen. Wenn Sie die Standardeinstellungen ändern möchten, übergeben Sie OnHeaderDecodedListener an decodeDrawable() oder decodeBitmap(). 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() ein Drawable zurück, das eine Instanz der Klasse AnimatedImageDrawable ist.

Es gibt verschiedene Methoden, um Bildeigenschaften festzulegen:

  • Wenn Sie das decodierte Bild auf eine bestimmte Größe skalieren möchten, übergeben Sie die Zieldimensionen an setTargetSize(). Sie können Bilder auch mithilfe einer Stichprobengröße skalieren. Übergeben Sie die Stichprobengröße direkt an setTargetSampleSize().
  • Wenn Sie ein Bild innerhalb des Bereichs des skalierten Bilds zuschneiden möchten, rufen Sie setCrop() auf.
  • Wenn Sie eine veränderbare Bitmap erstellen möchten, übergeben Sie true an setMutableRequired().

Mit ImageDecoder können Sie einem Bild auch benutzerdefinierte und komplexe Effekte hinzufügen, z. B. abgerundete Ecken oder Kreismuster. Verwenden Sie setPostProcessor() mit einer Instanz der Klasse PostProcessor, 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 Render-Thread die Animationen von AnimatedImageDrawable steuert. Der Rendering-Thread verwendet auch einen Worker-Thread zum Decodieren, damit die Decodierung nicht mit anderen Vorgängen im Rendering-Thread in Konflikt gerät. Mit dieser Implementierung kann in Ihrer App ein animiertes Bild angezeigt werden, ohne dass Sie die Updates verwalten oder andere Ereignisse im UI-Thread Ihrer App beeinträchtigen müssen.

Ein AnimatedImageDrawable kann mit einer Instanz von ImageDecoder decodiert werden. Das folgende Code-Snippet zeigt, wie Sie ImageDecoder verwenden, um Ihre AnimatedImageDrawable zu 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 Bild weiter bearbeiten können. Mit der Methode setPostProcessor() können Sie beispielsweise das Erscheinungsbild des Bildes ändern, z. B. eine Kreismaske oder abgerundete Ecken anwenden.

HDR VP9-Video, HEIF-Bildkomprimierung und Media-APIs

Android 9 bietet integrierte Unterstützung für High Dynamic Range (HDR) VP9 Profil 2. So können Sie HDR-Filme von YouTube, Play Filme und anderen Quellen auf HDR-fähigen Geräten an Ihre Nutzer streamen.

Android 9 unterstützt auch die Codierung von Bildern im HEIF-Format (High Efficiency Image File, HEIC). Dadurch wird die Komprimierung verbessert und der Speicherplatz- und Netzwerkdatenverbrauch reduziert. HEIF-Standbildbeispiele 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 Backend-Server senden und verwenden. Nachdem Sie dafür gesorgt haben, dass Ihre App mit diesem Datenformat für die Freigabe und Anzeige kompatibel ist, können Sie HEIF als Bildspeicherformat in Ihrer App ausprobieren. Sie können eine JPEG-Datei mit ImageDecoder oder BitmapFactory (die eine Bitmap aus einer JPEG-Datei abruft) in eine HEIC-Datei konvertieren. Anschließend können Sie HeifWriter verwenden, um HEIF-Standbilder aus YUV-Byte-Puffern oder Instanzen von Surface oder Bitmap zu schreiben.

Media-Messwerte sind auch über die Klassen AudioTrack, AudioRecord und MediaDrm verfügbar.

In Android 9 werden Methoden für die Klasse MediaDRM eingeführt, mit denen sich Messwerte, HDCP-Stufen, Sicherheitsstufen und die Anzahl der Sitzungen abrufen lassen. Außerdem wird die Steuerung von Sicherheitsstufen und sicheren Stopps verbessert. Weitere Informationen finden Sie im API-Diff-Bericht.

In Android 9 werden mit der AAudio API mehrere zusätzliche AAudioStream-Attribute unterstützt, darunter „usage“, „content type“ und „input preset“. Mit diesen Attributen können Sie Streams erstellen, die für VoIP- oder Camcorder-Anwendungen optimiert sind. Sie können auch die Sitzungs-ID festlegen, um einen AAudio-Stream einem Submix zuzuordnen, der Effekte enthalten kann. Verwenden Sie die AudioEffect API, um die Effekte zu steuern.

Mit Android 9 wird die AudioEffect API für die Dynamikverarbeitung eingeführt. Mit dieser Klasse können Sie kanalbasierte Audioeffekte wie Equalizer, Mehrbandkompression und Limiter in mehreren Phasen erstellen. Die Anzahl der Bänder und aktiven Phasen ist konfigurierbar und die meisten Parameter können in Echtzeit gesteuert werden.

Sensibilität für Datenkosten in JobScheduler

Ab Android 9 kann JobScheduler Netzwerksignale von Mobilfunkanbietern verwenden, um die Verarbeitung von netzwerkbezogenen Jobs zu verbessern.

Jobs können ihre geschätzte Datengröße deklarieren, das Prefetching signalisieren und detaillierte Netzwerkanforderungen angeben. JobScheduler verwaltet dann die Arbeit entsprechend dem Netzwerkstatus. Wenn das Netzwerk beispielsweise signalisiert, dass es überlastet ist, kann JobScheduler große Netzwerkanfragen aufschieben. Wenn Sie sich in einem Netzwerk mit unbegrenztem Datenvolumen befinden, kann JobScheduler Vorabruf-Jobs ausführen, um die Nutzerfreundlichkeit zu verbessern, z. B. durch das Vorabrufen von Überschriften.

Achten Sie beim Hinzufügen von Jobs darauf, dass Sie gegebenenfalls setEstimatedNetworkBytes(), setPrefetch() und setRequiredNetwork() verwenden, damit JobScheduler die Arbeit richtig ausführen kann. Wenn Ihr Job ausgeführt wird, müssen Sie das von JobParameters.getNetwork() zurückgegebene Network-Objekt verwenden. Andernfalls verwenden Sie implizit das Standardnetzwerk des Geräts, das möglicherweise nicht Ihren Anforderungen entspricht und zu einer unbeabsichtigten 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 Android-Geräten zu beschleunigen. In Android 9 wurde die API erweitert und verbessert. Sie unterstützt jetzt neun neue Vorgänge:

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

Außerdem wird mit der API eine neue Funktion eingeführt: ANeuralNetworksModel_relaxComputationFloat32toFloat16(). Damit können Sie angeben, ob ANEURALNETWORKS_TENSOR_FLOAT32 mit einem Bereich und einer Genauigkeit berechnet werden soll, die so niedrig sind wie beim IEEE 754-Gleitkommaformat mit 16 Bit.

AutoFill-Framework

In Android 9 wurden mehrere Verbesserungen eingeführt, 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 zum Autofill-Framework.

Erhöhte Sicherheit

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

Android geschützte Bestätigung

Auf unterstützten Geräten mit Android 9 oder höher können Sie die Funktion „Android Protected Confirmation“ verwenden. Wenn Sie diesen Workflow verwenden, wird in Ihrer App eine Aufforderung angezeigt, in der der Nutzer eine kurze Erklärung bestätigen muss. Mit dieser Anweisung kann die App bestätigen, dass der Nutzer eine vertrauliche Transaktion wie eine Zahlung abschließen möchte.

Wenn der Nutzer die Erklärung akzeptiert, empfängt und speichert Android Keystore eine kryptografische Signatur, die durch einen keyed-hash message authentication code (HMAC) geschützt ist. Nachdem Android Keystore die Gültigkeit der Nachricht bestätigt hat, kann Ihre App den aus trustedConfirmationRequired generierten Schlüssel in der vertrauenswürdigen Ausführungsumgebung (Trusted Execution Environment, TEE) verwenden, um die vom Nutzer akzeptierte Nachricht zu signieren. Die Signatur weist mit sehr hoher Wahrscheinlichkeit darauf hin, dass der Nutzer die Erklärung gesehen und ihr zugestimmt hat.

Achtung : Android Protected Confirmation bietet keinen sicheren Informationskanal für den Nutzer. Ihre App kann keine Vertraulichkeitsgarantien annehmen, die über die von der Android-Plattform angebotenen hinausgehen. Verwenden Sie diesen Workflow insbesondere nicht, um vertrauliche Informationen anzuzeigen, die Sie normalerweise nicht auf dem Gerät des Nutzers anzeigen würden.

Eine Anleitung zum Hinzufügen der Unterstützung für die geschützte Bestätigung von Android finden Sie im Leitfaden zur geschützten Bestätigung von Android.

Einheitliches Dialogfeld für die biometrische Authentifizierung

In Android 9 stellt das System biometrische Authentifizierungsdialogfelder im Namen Ihrer App bereit. Diese Funktion sorgt für ein standardisiertes Erscheinungsbild und eine standardisierte Platzierung des Dialogfelds. So können Nutzer darauf vertrauen, dass sie sich mit einem vertrauenswürdigen biometrischen Anmeldedatenprüfer authentifizieren.

Wenn Ihre App FingerprintManager verwendet, um Nutzern ein Dialogfeld für die Fingerabdruckauthentifizierung anzuzeigen, wechseln Sie stattdessen zu BiometricPrompt. BiometricPrompt verlässt sich darauf, dass das System das Authentifizierungsdialogfeld anzeigt. Das Verhalten der App wird auch an die Art der biometrischen Authentifizierung angepasst, die ein Nutzer ausgewählt hat.

bestätigen.

Hardwaresicherheitsmodul

Auf unterstützten Geräten mit Android 9 oder höher kann ein StrongBox KeyMint (früher Keymaster) installiert sein, eine Implementierung des KeyMint-HAL (früher Keymaster), das sich in einem Hardware-Sicherheitsmodul befindet. Das Modul enthält Folgendes:

  • Eigene CPU
  • Sicherer Speicher
  • Ein echter Zufallszahlengenerator.
  • Zusätzliche Mechanismen, um Manipulationen an Paketen und das nicht autorisierte Sideloading von Apps zu verhindern.

Beim Prüfen von Schlüsseln, die im StrongBox KeyMint gespeichert sind, wird die Integrität eines Schlüssels vom System mit der Trusted Execution Environment (TEE) bestätigt.

Weitere Informationen zur Verwendung von StrongBox KeyMint finden Sie unter Hardware Security Module.

Sicherer Schlüsselimport 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 Keystore importiert werden können. KeyMint entschlüsselt dann die Schlüssel im Keystore, sodass der Inhalt der Schlüssel nie als Klartext im Hostspeicher des Geräts angezeigt wird.

Weitere Informationen zum sicheren Importieren verschlüsselter Schlüssel

APK-Signaturschema mit Schlüsselrotation

Unter Android 9 wird das APK-Signaturschema v3 unterstützt. Bei diesem Schema kann für jedes Signaturzertifikat ein Proof-of-Rotation-Eintrag in den Signaturblock aufgenommen werden. Diese Funktion ermöglicht es, Ihre App mit einem neuen Signaturzertifikat zu signieren, indem die bisherigen Signaturzertifikate der APK-Datei mit dem Zertifikat verknüpft werden, mit dem sie jetzt signiert ist.

apksigner

Option, die Entschlüsselung von Schlüsseln nur auf entsperrten Geräten zulässt

In Android 9 wird das Flag unlockedDeviceRequired eingeführt. Mit dieser Option wird festgelegt, ob für den Keystore der Bildschirm entsperrt sein muss, bevor die Entschlüsselung von übertragenen oder gespeicherten Daten mit dem angegebenen Schlüssel zulässig ist. Diese Schlüsseltypen eignen sich gut zum Verschlüsseln vertraulicher Daten, die auf der Festplatte gespeichert werden sollen, z. B. Gesundheits- oder Unternehmensdaten. Das Flag bietet Nutzern eine höhere Sicherheit, dass die Daten nicht entschlüsselt werden können, wenn das Gerät gesperrt ist, falls ihr Smartphone verloren geht oder gestohlen wird.

Wenn Sie einen Schlüssel vor der Entschlüsselung schützen möchten, während das Gerät gesperrt ist, aktivieren Sie das Flag, indem Sie true an die Methode setUnlockedDeviceRequired() übergeben. 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. Für den Zugriff auf ein gesperrtes Gerät ist eine PIN, ein Passwort, ein Fingerabdruck oder ein anderer vertrauenswürdiger Faktor erforderlich.

Unterstützung für Legacy-Verschlüsselung

Android 9-Geräte, die mit Keymaster 4 ausgeliefert werden, unterstützen den Triple Data Encryption Algorithm (Triple DES). Wenn Ihre App mit Legacy-Systemen interagiert, die Triple DES erfordern, verwenden Sie diesen Chiffriertyp, wenn Sie vertrauliche Anmeldedaten verschlüsseln.

Weitere Informationen zum Sichern Ihrer App

Einstellung von WPS

Wi-Fi Protected Setup (WPS) wird aus Sicherheitsgründen nicht mehr unterstützt.

Android-Sicherungen

In Android 9 wurden neue Funktionen und Entwickleroptionen für das Sichern und Wiederherstellen hinzugefügt. Details zu diesen Änderungen finden Sie in den folgenden Abschnitten.

Sicherungen mit clientseitiger Verschlüsselung

Unter Android 9 ist die Verschlüsselung von Android-Sicherungen über einen Clientschlüssel möglich. Diese Unterstützung wird 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 Sicherungen wiederherzustellen, die vom Gerät des Nutzers erstellt wurden. Weitere Informationen zur Technologie hinter dieser Funktion finden Sie im Whitepaper Google Cloud Key Vault Service.

Gerätebedingungen für die Sicherung festlegen

Wenn Ihre App-Daten vertrauliche Informationen oder Einstellungen enthalten, können Sie in 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.

Bedienungshilfen

Android 9 bietet Verbesserungen am Framework für Barrierefreiheit, die es einfacher machen, Nutzern Ihrer App ein noch besseres Nutzungserlebnis zu bieten.

Semantik für die Navigation

Mit den in Android 9 hinzugefügten Attributen können Sie einfacher definieren, wie Bedienungshilfen, insbesondere Screenreader, von einem Teil des Bildschirms zum anderen navigieren. Diese Attribute können Nutzern mit eingeschränktem Sehvermögen helfen, schnell durch Text in der Benutzeroberfläche Ihrer App zu navigieren und eine Auswahl zu treffen.

In einer Shopping-App kann ein Screenreader Nutzern beispielsweise helfen, direkt von einer Kategorie mit Angeboten zur nächsten zu wechseln, ohne dass der Screenreader alle Elemente in einer Kategorie vorlesen muss, bevor er zur nächsten wechselt.

Titel von Bedienungshilfenbereichen

In Android 8.1 (API-Ebene 27) und niedriger können Bedienungshilfen nicht immer erkennen, wann ein bestimmter Bereich des Bildschirms aktualisiert wurde, z. B. wenn 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 bilden.

Unter Android 9 können Sie Titel für Bedienungshilfenbereiche oder individuell identifizierbare Titel für diese Bereiche angeben. Wenn ein Bereich einen Titel für Barrierefreiheit hat, erhalten Barrierefreiheitsdienste detailliertere Informationen, wenn sich der Bereich ändert. Mit dieser Funktion können Dienste Nutzern detailliertere Informationen dazu geben, was sich in der Benutzeroberfläche geändert hat.

Verwenden Sie das Attribut android:accessibilityPaneTitle, um den Titel eines Bereichs anzugeben. Sie können auch den Titel eines UI-Bereichs aktualisieren, der zur Laufzeit ersetzt wird, indem Sie setAccessibilityPaneTitle() verwenden. Sie können beispielsweise einen Titel für den Inhaltsbereich eines Fragment-Objekts angeben.

Überschriftenbasierte Navigation

Wenn in Ihrer App Textinhalte mit logischen Überschriften angezeigt werden, legen Sie das Attribut android:accessibilityHeading für die Instanzen von View, die diese Überschriften darstellen, auf true fest. Durch das Hinzufügen dieser Überschriften können Barrierefreiheitsdienste Nutzern helfen, direkt von einer Überschrift zur nächsten zu navigieren. Jeder Bedienungshilfendienst kann diese Funktion nutzen, um die Navigation auf der Benutzeroberfläche für Nutzer zu verbessern.

Gruppennavigation und ‑ausgabe

Screenreader haben das Attribut android:focusable traditionell verwendet, um zu bestimmen, wann sie ein ViewGroup oder eine Sammlung von View-Objekten als eine Einheit vorlesen sollen. So konnten Nutzer nachvollziehen, dass die Ansichten logisch miteinander verknüpft waren.

In Android 8.1 und niedriger müssen Sie jedes View-Objekt in einem ViewGroup als nicht fokussierbar und das ViewGroup selbst als fokussierbar markieren. Diese Anordnung führte dazu, dass einige Instanzen von View als fokussierbar markiert wurden, was die Tastaturnavigation erschwerte.

Ab Android 9 können Sie das Attribut android:screenReaderFocusable anstelle des Attributs android:focusable verwenden, wenn das Fokussieren eines View-Objekts unerwünschte Folgen hat. Screenreader legen den Fokus auf alle Elemente, für die entweder android:screenReaderFocusable oder android:focusable auf true festgelegt ist.

Komfortaktionen

Android 9 bietet Unterstützung für die Ausführung von Komfortaktionen im Namen von Nutzern:

Interaktion mit Kurzinfos
Durch die hinzugefügten Funktionen im Bedienungshilfen-Framework haben 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 eingeführt. Mit Ihrem Dienst können Nutzer ihre Geräte sperren und Screenshots aufnehmen. Verwenden Sie dazu die Aktionen GLOBAL_ACTION_LOCK_SCREEN und GLOBAL_ACTION_TAKE_SCREENSHOT.

Details zur Änderung des Zeitfensters

Unter Android 9 ist es einfacher, Updates für die Fenster einer App zu verfolgen, wenn eine App mehrere Fenster gleichzeitig neu zeichnet. Wenn ein TYPE_WINDOWS_CHANGED-Ereignis eintritt, verwenden Sie die getWindowChanges()-API, um zu ermitteln, wie sich die Fenster geändert haben. Bei einer Aktualisierung mit mehreren Fenstern wird für jedes Fenster eine eigene Gruppe von Ereignissen generiert. Die Methode getSource() gibt die Stammansicht des Fensters zurück, das mit jedem Ereignis verknüpft ist.

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

Ausrichtung

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

Die Auswirkungen auf die Kompatibilität von Apps sind in den meisten Fällen minimal. Wenn Ihre App jedoch ein benutzerdefiniertes Rotationsverhalten oder ungewöhnliche Einstellungen für die Bildschirmausrichtung verwendet, können Probleme auftreten, die zuvor unbemerkt geblieben wären, als die Rotationspräferenz des Nutzers immer auf Hochformat eingestellt war. Wir empfehlen Ihnen, das Rotationsverhalten in allen wichtigen Aktivitäten Ihrer App zu prüfen und dafür zu sorgen, dass alle Einstellungen für die Bildschirmausrichtung weiterhin für eine optimale Nutzerfreundlichkeit sorgen.

Weitere Informationen finden Sie unter Verhaltensänderungen.

Ein Smartphone wird gedreht und zeigt einen neuen Rotationsmodus, mit dem Nutzer die Rotation manuell auslösen können.

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

Text

Android 9 bietet die folgenden textbezogenen Funktionen:

  • Vorberechneter Text: Die Klasse PrecomputedText verbessert die Leistung beim Rendern von Text, da Sie die erforderlichen Informationen vorab berechnen und im Cache speichern können. Außerdem kann Ihre App damit das Textlayout außerhalb des Hauptthreads ausführen.

  • Vergrößerung: Die Klasse Magnifier ist ein Plattform-Widget, das eine Vergrößerungs-API bereitstellt, die eine einheitliche Vergrößerungsfunktion in allen Apps ermöglicht.

  • Smart Linkify: In Android 9 wird die Klasse TextClassifier verbessert. Sie nutzt maschinelles Lernen, um bestimmte Entitäten im ausgewählten Text zu erkennen und Aktionen vorzuschlagen. Mit TextClassifier kann Ihre App beispielsweise erkennen, dass der Nutzer eine Telefonnummer ausgewählt hat. Ihre App könnte dann vorschlagen, dass der Nutzer mit dieser Nummer einen Anruf startet. Die Funktionen in TextClassifier ersetzen die Funktionalität der Klasse Linkify.

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

Ahead-of-Time-Konvertierung von DEX-Dateien durch ART

Auf Geräten mit Android 9 oder höher optimiert der Ahead-of-Time-Compiler (AOT) der Android-Laufzeit (ART) komprimierte DEX-Dateien (Dalvik Executable) zusätzlich, indem er die DEX-Dateien in einem App-Paket in eine kompaktere Darstellung konvertiert. Durch diese Änderung kann Ihre App schneller gestartet werden und benötigt weniger Speicherplatz und RAM.

Diese Verbesserung kommt insbesondere Low-End-Geräten mit langsameren Festplatten-E/A-Geschwindigkeiten zugute.

System-Tracing auf dem Gerät

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

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

Weitere Informationen zu diesem Tool