Funktionen und APIs unter Android 9

Android 9 (API-Level 28) bietet tolle neue Funktionen für Nutzenden und Entwickelnden. In diesem Dokument werden die Neuerungen für Entwickler beschrieben.

Weitere Informationen zu den neuen APIs finden Sie im API-Diff-Bericht oder in der Android API-Referenz. Weitere Informationen Weitere Informationen zu Verhaltensänderungen unter Android 9 zu Bereichen, in denen sich Plattformänderungen auf Ihre Apps auswirken können.

Indoor-Positionierung mit Wi-Fi RTT

Neue RTT APIs unterstützen die Positionierung von Innenbereichen in Ihren Apps.

Android 9 bietet Plattformunterstützung für das IEEE 802.11-2016-WLAN-Protokoll, auch als Wi-Fi Round-Trip-Time (RTT) bezeichnet. So können Sie die Indoor-Positionierung in Ihren Apps nutzen.

Auf Geräten mit Android 9 und Hardwareunterstützung können Ihre Apps die RTT APIs verwenden, um die Entfernung zu RTT-fähigen WLAN-Zugangspunkten (APs) in der Nähe zu messen. Das Gerät muss Standortdienste aktiviert und die WLAN-Suche aktiviert (unter Einstellungen > Standort) und Ihre App muss über die ACCESS_FINE_LOCATION Berechtigung. Das Gerät muss sich nicht mit den Zugangspunkten verbinden, um RTT zu verwenden. Zum Schutz der Privatsphäre kann nur das Smartphone die Entfernung zum Zugangspunkt ermitteln. Die Zugangspunkte haben diese Informationen nicht.

Wenn Ihr Gerät die Entfernung zu mindestens drei Zugangspunkten misst, können Sie mit einem Trilateration-Algorithmus die Geräteposition 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. die Navigation in Gebäuden und detaillierte standortbasierte Dienste wie die differenzierte Sprachsteuerung (z. B. „Schalte diese Lampe ein“) und standortbasierte Informationen (z. B. „Gibt es Sonderangebote für dieses Produkt?“).

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

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

Unterstützung für Display-Aussparung

Bildschirm mit Entwickleroptionen, auf dem verschiedene Aussparungsgrößen zu sehen sind

Display-Aussparung mit Emulator testen

Android 9 bietet Unterstützung für die neuesten randlosen Displays mit Display-Aussparungen für Kameras und Lautsprecher. Die DisplayCutout können Sie die Position und Form von nicht funktionalen Bereichen ermitteln, sollte nicht angezeigt werden. Verwenden Sie die Methode getDisplayCutout(), um die Existenz und Platzierung dieser Ausschnitte zu ermitteln.

Ein neues Fenster-Layout-Attribut, layoutInDisplayCutoutMode, kannst du den Inhalt deiner App um die Aussparungen eines Geräts herum anordnen. Sie können dieses Attribut auf einen der folgenden Werte festlegen:

So simulieren Sie einen Displayausschnitt auf jedem Gerät oder Emulator mit Android 9:

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

Benachrichtigungen

Mit Android 9 wurden mehrere Verbesserungen an Benachrichtigungen eingeführt, die allen Entwicklern zur Verfügung stehen, die ihre Apps auf API-Level 28 oder höher ausrichten.

Benachrichtigungen zu Mitteilungen

MessagingStyle mit angehängtem Foto.

Benachrichtigung über Nachrichten

MessagingStyle mit Antworten und Unterhaltungen

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

Verbesserte Nachrichtenfunktion

Ab Android 7.0 (API-Ebene 24) können Sie eine Aktion hinzufügen, über die der Nutzer auf Nachrichten antworten oder anderen Text direkt über die Benachrichtigung eingeben kann. Mit Android 9 diese Funktion mit den folgenden Verbesserungen:

  • Vereinfachte Unterstützung für Gesprächsteilnehmer: Person -Klasse wird verwendet, um Personen zu identifizieren, die an einer Konversation beteiligt sind, einschließlich ihrer und URIs enthalten. Viele andere APIs, z. B. addMessage(), nutzen jetzt die Person-Klasse anstelle einer CharSequence. Klasse Person unterstützt auch das Builder-Designmuster.

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

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 die vom System gesendet wird, wenn ein Nutzer versehentlich eine Messaging-Benachrichtigung schließt. Mit dieser zusätzlichen Funktion können Sie Textfelder in der App vorab ausfüllen, damit Nutzende ihre Antwort zu Ende zu bringen.

  • Herausfinden, ob es sich um eine Gruppenunterhaltung handelt: Mit setGroupConversation() können Sie eine Unterhaltung als Gruppenunterhaltung oder Unterhaltung mit Einzelpersonen kennzeichnen.

  • Legen Sie die semantische Aktion für einen Intent fest: setSemanticAction() können Sie Aktionen semantische Bedeutung verleihen, z. B. „als gelesen markieren“, „Löschen“, „antworten“, und so weiter.

  • Intelligente Antwort: Android 9 unterstützt dieselben vorgeschlagenen Antworten wie in Ihrer Messaging-App. 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 angezeigt werden soll, einen vom Nutzer anpassbaren Kanal erstellen. Mit Android 9 wurden die Einstellungen für Benachrichtigungskanäle vereinfacht:

  • Blockieren von Kanalgruppen: Nutzer können jetzt in den Benachrichtigungseinstellungen einer App ganze Kanalgruppen blockieren. Mit der Methode isBlocked() können Sie erkennen, ob eine Gruppe blockiert ist und daher keine Benachrichtigungen für Kanäle in dieser Gruppe gesendet werden.

    Außerdem kann Ihre App die aktuellen Einstellungen der Channelgruppe mit das neue getNotificationChannelGroup() .

  • Neue Broadcast-Intent-Typen: Das Android-System sendet jetzt Broadcast-Intents, wenn sich der Blockierungsstatus von Benachrichtigungskanälen und -gruppen ändert. Die App, zu der der blockierte Kanal oder die Gruppe gehört, kann diese Intents überwachen und entsprechend reagieren. Weitere Informationen zu diesen Intent-Aktionen und Extras finden Sie in der aktualisierten Liste der Konstanten in der NotificationManager-Referenz. Informationen zum Reagieren auf Broadcast-Intents finden Sie unter Nachrichten an alle:

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

  • Für NotificationManager.Policy gibt es außerdem sieben neue „Bitte nicht stören“-Konstanten kann verwendet werden, um visuelle Unterbrechungen zu unterdrücken:

Unterstützung mehrerer Kameras und Kameraupdates

Auf Geräten mit Android 9 kannst du auf Streams zugreifen gleichzeitig von zwei oder mehr physischen Kameras. Auf Geräten mit Kamera mit Dual-Front- oder Rückkamera können Sie innovative Funktionen, die mit einer einzigen Kamera nicht möglich sind, wie beispielsweise Zoom, Bokeh und Stereovision verwenden. Mit der API können Sie auch einen logischen oder zusammengeführten Kamerastream aufrufen, der automatisch zwischen zwei oder mehr Kameras wechselt.

Zu den weiteren Verbesserungen bei der Kamera gehören zusätzliche Sitzungs- Parameter mit denen sich Verzögerungen bei der ersten Aufnahme vermeiden lassen. Und dank der Funktion zum Teilen Kameraclients können verschiedene Anwendungsfälle abdecken, ohne die App anzuhalten oder zu starten. Kamerastreaming. Außerdem haben wir APIs für die displaybasierte Blitzunterstützung und den Zugriff auf OIS-Zeitstempel hinzugefügt, um die Bildstabilisierung und Spezialeffekte auf App-Ebene zu ermöglichen.

Unter Android 9 unterstützt die Multi-Camera API monochrome Kameras für Geräte mit FULL- oder LIMITED-Funktion. Die monochrome Ausgabe erfolgt über die YUV_420_888 mit Y als Graustufen, U (Cb) als 128 und V (Cr) als 128.

Android 9 ermöglicht auch die Unterstützung externer USB-Sticks/UVC-Dateien. Kameras an unterstützten Geräten.

ImageDecoder für Drawables und Bitmaps

In Android 9 wird die Klasse ImageDecoder eingeführt, die einen modernisierten Ansatz für die Dekodierung von Bildern bietet. Diesen Kurs verwenden anstelle von BitmapFactory und BitmapFactory.Options APIs

Mit ImageDecoder können Sie eine Drawable oder eine Bitmap aus einem Byte-Puffer, einer Datei oder einem URI erstellen. Wenn Sie ein Bild decodieren möchten, rufen Sie zuerst createSource() mit der Quelle des codierten Bildes auf. Rufen Sie dann decodeDrawable() oder decodeBitmap() indem Sie den ImageDecoder.Source übergeben. um ein Drawable-Objekt zu erstellen, oder Bitmap. 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() den Fehlerwert Drawable, die eine Instanz des AnimatedImageDrawable .

Es gibt verschiedene Methoden, um Bildeigenschaften festzulegen:

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

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

Animation

Mit Android 9 wird die AnimatedImageDrawable Klasse zum Zeichnen und Anzeigen animierter GIF- und WebP-Bilder. AnimatedImageDrawable funktioniert ähnlich wie AnimatedVectorDrawable, da die Animationsfunktionen von AnimatedImageDrawable vom Render-Thread gesteuert werden. Der Render-Thread verwendet auch einen Worker-Thread für die Dekodierung, damit die Dekodierung nicht andere Vorgänge im Render-Thread beeinträchtigt. Diese Implementierung ermöglicht um ein animiertes Bild anzuzeigen, ohne die Updates oder andere Ereignisse im UI-Thread Ihrer App beeinträchtigen.

Ein AnimatedImageDrawable kann mit einer Instanz von ImageDecoder decodiert werden. Im folgenden Code-Snippet wird gezeigt, wie du ImageDecoder zum Decodieren von AnimatedImageDrawable verwendest:

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 ändern können. Mit der Methode setPostProcessor() können Sie beispielsweise das Erscheinungsbild des Bilds ändern, indem Sie eine kreisförmige Maske 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 Profile 2, So kannst du deinen Nutzern HDR-fähige Filme aus YouTube, Play Filme & Serien und anderen Quellen auf HDR-fähigen Geräten nutzen.

Android 9 unterstützt jetzt auch die Bildcodierung mit dem High Efficiency Image Dateiformat (HEIF oder HEIC), wodurch die Komprimierung verbessert und Speicherplatz und Netzwerkdaten reduziert werden. Nutzung. Beispiele für HEIF-Standbilder werden in der MediaMuxer und MediaExtractor Klassen. Dank der Plattformunterstützung auf Geräten mit Android 9 ist es ganz einfach, HEIF-Bilder von Ihrem Back-End-Server verwenden. Nachdem Sie sich vergewissert haben, App ist mit diesem Datenformat zum Teilen und Anzeigen kompatibel – probier HEIF aus als Speicherformat für Bilder in Ihrer App verwenden. Sie können eine JPEG-zu-Heic-Konvertierung mit ImageDecoder oder BitmapFactory (wobei Bitmap aus einer JPEG-Datei). Sie können dann HeifWriter zum Schreiben von HEIF Standbilder aus YUV-Bytepuffern oder Instanzen von Surface oder Bitmap

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

In Android 9 werden der Klasse MediaDRM Methoden hinzugefügt, mit denen sich Messwerte, HDCP-Ebenen, Sicherheitsebenen und die Anzahl der Sitzungen abrufen und die Kontrolle über Sicherheitsebenen und sichere Stopps verbessern lassen. Weitere Informationen finden Sie im API-Diff-Bericht.

In Android 9 wird mit der AAudio API die Unterstützung für mehrere zusätzliche AAudioStream-Attribute hinzugefügt, darunter „Nutzung“, „Inhaltstyp“ und „Eingabevoreinstellung“. Mit diesen Attributen können Sie Streams erstellen, die für VoIP- oder Camcorderanwendungen optimiert sind. Sie können auch die Sitzungs-ID auf einen AAudio-Stream mit einem Submix verknüpfen, der Effekte enthalten kann. Mit der AudioEffect API kannst du die Effekte steuern.

Mit Android 9 wird die AudioEffect API für die dynamische Verarbeitung eingeführt. Mit dieser Klasse kannst du kanalbasierte Audioeffekte wie Equalizer, Mehrbandkompression und Limiter über mehrere Phasen hinweg erstellen. Die Anzahl der Bänder und aktiven Stufen ist konfigurierbar und die meisten Parameter können in Echtzeit gesteuert werden.

Vertraulichkeit der Datenkosten in JobScheduler

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

Jobs können ihre geschätzte Datengröße deklarieren, einen Signal-Vorabruf durchführen und und detaillierte Netzwerkanforderungen. JobScheduler verwaltet dann die Arbeit entsprechend dem Netzwerkstatus. Wenn das Netzwerk beispielsweise überlastet ist, kann JobScheduler große Netzwerkanfragen verschieben. Wenn du dich in einem unbegrenzten Netzwerk befindest, kann JobScheduler prefetch-Jobs ausführen, um die Nutzerfreundlichkeit zu verbessern, z. B. durch das Vorabladen von Schlagzeilen.

Achten Sie beim Hinzufügen von Jobs darauf, bei Bedarf setEstimatedNetworkBytes(), setPrefetch() und setRequiredNetwork() zu verwenden, damit JobScheduler die Arbeit richtig verarbeiten kann. Wenn Ihr Job ausgeführt wird, müssen Sie das Objekt Network verwenden. zurückgegeben von JobParameters.getNetwork() Andernfalls wird das Standardnetzwerk des Geräts verwendet, 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-Ebene 27) eingeführt, um maschinelles Lernen direkt auf dem Gerät unter Android zu beschleunigen. Android 9 erweitert und verbessert die API und bietet Unterstützung für neun neue Vorgänge:

Bekanntes Problem: Wenn ANEURALNETWORKS_TENSOR_QUANT8_ASYMM-Tensoren an den Vorgang ANEURALNETWORKS_PAD übergeben werden, der unter Android 9 und höher verfügbar ist, stimmt die Ausgabe von NNAPI möglicherweise nicht mit der Ausgabe von Frameworks für maschinelles Lernen höherer Ebene überein, z. B. TensorFlow Lite. Ich sollte 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 so niedrig sind wie beim 16-Bit-Gleitkommaformat IEEE 754.

AutoFill-Framework

Android 9 bietet mehrere Verbesserungen beim automatischen Ausfüllen implementieren, um die Nutzererfahrung beim Ausfüllen . Weitere Informationen zur Verwendung der Autofill-Funktionen in deiner App findest du in der Leitfaden zum Autofill-Framework

Erhöhte Sicherheit

Android 9 bietet mehrere 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 Bestätigung durch Android-Schutz verwenden. Bei Verwendung dieses Workflows wird dem Nutzer in Ihrer App eine Aufforderung angezeigt, in der er aufgefordert wird, eine kurze Erklärung zu genehmigen. Mit dieser Aussage kann die App bestätigen, dass der Nutzer ein sensible Transaktion wie eine Zahlung.

Wenn der Nutzer die Erklärung akzeptiert, empfängt und speichert der Android Keystore eine kryptografische Signatur, die durch einen HMAC (Keyed-Hash Message Authentication Code) geschützt ist. Nachdem der Android Keystore die Gültigkeit der Nachricht bestätigt hat, kann Ihre App den aus trustedConfirmationRequired generierten Schlüssel in der Trusted Execution Environment (TEE) verwenden, um die vom Nutzer akzeptierte Nachricht zu signieren. Die Unterschrift gibt mit sehr hoher Wahrscheinlichkeit an, dass der Nutzer die Erklärung gelesen und ihr zugestimmt hat.

Achtung: Die geschützte Bestätigung von Android bietet keinen sicheren Informationskanal für den Nutzer. Ihre App kann keine Vertraulichkeitsgarantien übernehmen, die über die der Android-Plattform hinausgehen. Verwenden Sie diesen Workflow insbesondere nicht, um vertrauliche Daten anzuzeigen, die Sie normalerweise nicht auf dem Gerät des Nutzers anzeigen würden.

Eine Anleitung zur Unterstützung der Android Protected Confirmation-Bestätigung finden Sie in der Android Protected Bestätigung .

Dialogfeld für einheitliche biometrische Authentifizierung

Unter Android 9 stellt das System Dialogfelder für die biometrische Authentifizierung im Namen Ihrer App bereit. Diese Funktion sorgt für ein standardisiertes Erscheinungsbild und eine standardmäßige Platzierung des Dialogfelds, sodass Nutzer mehr Vertrauen in die Authentifizierung über einen vertrauenswürdigen biometrischen Anmeldedaten-Checker haben.

Wenn in Ihrer App FingerprintManager verwendet wird, um Nutzern ein Dialogfeld für die Fingerabdruckauthentifizierung anzuzeigen, verwenden Sie stattdessen BiometricPrompt. BiometricPrompt greift auf das System zurück, um das Authentifizierungsdialogfeld anzuzeigen. Außerdem passt er sein Verhalten an die Art des biometrischen Authentifizierung, die der Nutzer ausgewählt hat.

Hardwaresicherheitsmodul

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

  • Die eigene CPU.
  • Sichere Speicherung
  • Ein echter Zufallszahlengenerator.
  • Zusätzliche Mechanismen zum Schutz vor Paketmanipulationen und nicht autorisiertem Sideloading von Apps.

Bei der Überprüfung von Schlüsseln, die im StrongBox Keymaster gespeichert sind, bestätigt das System eine die Integrität des Schlüssels mit der vertrauenswürdigen Ausführungsumgebung (Trusted Execution Environment, TEE).

Weitere Informationen zur Verwendung von Strongbox Keymaster finden Sie unter Hardware Security Module.

Sicherer Schlüsselimport in den Schlüsselspeicher

Android 9 bietet zusätzliche Sicherheit bei der Schlüsselentschlüsselung, die Möglichkeit, verschlüsselte Schlüssel sicher in den Schlüsselspeicher zu importieren, Mit ASN.1-codiertes Schlüsselformat. Der Keymaster entschlüsselt dann die Schlüssel im Schlüsselspeicher, 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

Android 9 unterstützt das APK-Signaturschema v3. Dieses Schema hat die Option, einen Rotationsnachweis in den Signaturblock aufzunehmen, Zertifikat. Mit dieser Funktion kann Ihre App mit einem neuen Signaturzertifikat signiert werden, indem die bisherigen Signaturzertifikate der APK-Datei mit dem Zertifikat verknüpft werden, mit dem sie jetzt signiert ist.

Weitere Informationen zum Rotieren von Schlüsseln mit apksigner

Option, die Schlüsselentschlüsselung nur auf entsperrten Geräten zuzulassen

In Android 9 wird das Flag unlockedDeviceRequired eingeführt. Mit dieser Option legen Sie ob der Schlüsselspeicher vor dem Zugriff auf Entschlüsselung aller In-Flight- oder gespeicherten Daten mit dem angegebenen Schlüssel. Diese Typen der Schlüssel eignen sich gut zum Verschlüsseln sensibler Daten auf der Festplatte, z. B. Gesundheits- oder Unternehmensdaten. 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.

Aktivieren Sie das Flag, um zu verhindern, dass ein Schlüssel entschlüsselt wird, während das Gerät gesperrt ist. indem Sie true an setUnlockedDeviceRequired() übergeben . Wenn der Bildschirm des Nutzers nach diesem Schritt gesperrt ist, schlagen alle Versuche fehl, Daten mit diesem Schlüssel zu entschlüsseln oder zu signieren. 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 ältere Verschlüsselungsmethoden

Android 9-Geräte, die mit Keymaster 4 ausgeliefert werden, unterstützen den Triple Data Encryption Algorithmus (Triple DES). Wenn Ihre App mit älteren Systemen interoperiert, für die Triple DES erforderlich ist, verwenden Sie diese Chiffre, um vertrauliche Anmeldedaten zu verschlüsseln.

Weitere Informationen dazu, wie du deine App sicherer machen kannst, findest du unter Sicherheit für Android Entwickler:

Einstellung von WPS

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

Android-Sicherungen

Android 9 bietet neue Funktionen und Entwickleroptionen zum Sichern und Wiederherstellen. Details zu diesen Änderungen finden Sie hier .

Back-ups der clientseitigen Verschlüsselung

Android 9 unterstützt die Verschlüsselung von Android-Sicherungen mit einem Client-seitigen Secrets. 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 Back-ups wiederherzustellen, die auf dem Gerät des Nutzers erstellt wurden. Weitere Informationen Weitere Informationen zur Technologie hinter dieser Funktion finden Sie in Google Cloud Key Vault Whitepaper zu Google Workspace.

Gerätebedingungen für die Sicherung definieren

Wenn Ihre App-Daten vertrauliche Informationen oder Einstellungen enthalten, wird Android 9 können Sie ein Gerät definieren, unter welchen Bedingungen Ihre App-Daten sind im Back-up des Nutzers enthalten, z. B. auf Clientseite Verschlüsselung aktiviert ist oder eine lokale Übertragung zwischen Geräten stattfindet.

Weitere Informationen zum Sichern von Daten auf Android-Geräten finden Sie unter Daten sichern Übersicht über die Sicherung.

Bedienungshilfen

Android 9 enthält Verbesserungen am Framework für Barrierefreiheit, mit denen Sie Nutzern Ihrer App noch mehr bieten können.

Navigationssemantische Elemente

Mit den in Android 9 hinzugefügten Attributen kannst du leichter definieren, Bedienungshilfen, insbesondere Screenreader, Bildschirm zu einem anderen zu wechseln. Diese Attribute können sehbehinderten Nutzern helfen, schnell durch den Text in der Benutzeroberfläche Ihrer App navigieren und eine Auswahl treffen können.

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

Titel des Bereichs „Bedienungshilfen“

Unter Android 8.1 (API-Ebene 27) und niedriger können Bedienungshilfen nicht immer feststellen, 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 relevanten UI-Elementen, die in der Regel eine Fragment.

In Android 9 können Sie Titel des Bereichs für Bedienungshilfen oder identifizierbare Titel für diese Bereiche. Hat ein Bereich einen Titel für Bedienungshilfen, Bedienungshilfen erhalten detailliertere Informationen, wenn sich das Fenster ändert. Mit dieser Funktion können Dienste dem Nutzer detailliertere Informationen zur Verfügung stellen. was sich in der Benutzeroberfläche geändert hat.

Um den Titel eines Fensters anzugeben, verwenden Sie die android:accessibilityPaneTitle . Sie können auch den Titel eines UI-Fensters aktualisieren, das unter Laufzeit mit setAccessibilityPaneTitle(). Sie können beispielsweise einen Titel für den Inhaltsbereich eines Fragment-Objekts angeben.

Überschriftenbasierte Navigation

Wenn Ihre App Textinhalte mit logischen Überschriften enthält, legen Sie für die Instanzen von View, die diese Überschriften darstellen, das Attribut android:accessibilityHeading auf true fest. Wenn Sie diese Überschriften hinzufügen, können Dienste zur Barrierefreiheit Nutzern helfen, direkt von einer Überschrift zur nächsten zu wechseln. Mit dieser Funktion kann jeder Bedienungshilfendienst die Navigation der Nutzer auf der Benutzeroberfläche verbessern.

Gruppennavigation und -ausgabe

Screenreader verwenden traditionell die Attribut android:focusable für wann sie ein ViewGroup oder eine Sammlung von View-Objekte als eine Einheit. Auf diese Weise dass die Ansichten einen logischen Bezug zueinander hatten.

Unter Android 8.1 und niedriger müssen Sie jedes View-Objekt in einem ViewGroup als nicht fokussierbar und das ViewGroup selbst als fokussierbar markieren. Durch diese Anordnung wurden einige Instanzen von View so markiert, dass sie den Fokus erhalten konnten, was die Tastaturnavigation erschwert hat.

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 Fokus auf alle Elemente legen, für die entweder android:screenReaderFocusable festgelegt wurde oder android:focusable auf true.

Praktische Aktionen

Android 9 unterstützt die Ausführung von praktischen Aktionen im Namen von Nutzern:

Interaktion mit Kurzinfos
Die hinzugefügten Funktionen im Bedienungshilfen-Framework bieten Zugriff auf Tooltips 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 einzublenden oder auszublenden.
Globale Aktionen hinzugefügt
Android 9 unterstützt jetzt zwei weitere Geräteaktionen in der AccessibilityService . Ihr Dienst kann Nutzern helfen, ihre Geräte mit den Aktionen GLOBAL_ACTION_LOCK_SCREEN und GLOBAL_ACTION_TAKE_SCREENSHOT zu sperren und Screenshots aufzunehmen.

Details zur Fensteränderung

Mit Android 9 können Sie Aktualisierungen der Fenster einer App leichter verfolgen, wenn eine App mehrere Fenster gleichzeitig neu zeichnet. Wenn ein TYPE_WINDOWS_CHANGED Ereignis auftritt, verwenden Sie den getWindowChanges() API, um zu ermitteln, wie sich die Fenster geändert haben. Während eines Mehrfensterupdates wird jeder generiert einen eigenen Satz von Ereignissen. Die Methode getSource() gibt die Stammansicht des Fensters zurück, die mit jedem Ereignis verknüpft ist.

Wenn eine App Titel für den Bereich „Barrierefreiheit“ 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 auftritt, verwenden Sie die vom getContentChangeTypes() um zu ermitteln, wie sich das Fenster geändert hat. So kann das Framework beispielsweise erkennen, wenn ein Bereich einen neuen Titel hat oder 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 auf eine Schaltfläche in der Systemleiste klicken.

Die Auswirkungen auf die Kompatibilität von Apps sind in den meisten Fällen minimal. Wenn Ihre App jedoch ein benutzerdefiniertes Drehungsverhalten hat oder ungewöhnliche Einstellungen für die Bildschirmausrichtung verwendet, kann es zu Problemen kommen, die zuvor unbemerkt geblieben wären, wenn die Nutzereinstellung für die Bildschirmausrichtung immer auf „Hochformat“ festgelegt war. Wir empfehlen Ihnen, das Rotationsverhalten bei allen wichtigen Aktivitäten Ihrer App Stellen Sie sicher, dass alle Einstellungen für die Bildschirmausrichtung weiterhin die eine optimale Nutzererfahrung bieten.

Weitere Informationen finden Sie in den zugehörigen Änderungen am Verhalten.

Rotierendes Smartphone mit neuem Rotationsmodus, mit dem Nutzer die Rotation manuell auslösen können

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

Text

Android 9 bietet folgende textbezogene Funktionen in der Plattform:

  • Vorab berechneter Text: Mit der Klasse PrecomputedText lässt sich die Leistung des Text-Renderings verbessern, da Sie die erforderlichen Informationen vorab berechnen und im Cache speichern können. Außerdem kann Ihre App das Textlayout nicht nutzen. im Hauptthread.

  • Lupe: Die Klasse Magnifier ist ein Plattform-Widget, das eine Lupen-API bereitstellt. So ist die Lupenfunktion in allen Apps einheitlich.

  • Intelligente Verknüpfung: In Android 9 wurde die Klasse TextClassifier verbessert. Dabei werden mithilfe von maschinellem Lernen einige Entitäten im ausgewählten Text erkannt und Aktionen vorgeschlagen. Mit TextClassifier kann Ihre App beispielsweise erkennen, dass der Nutzer eine Telefonnummer ausgewählt hat. Ihre App könnte dann vorschlagen, kann der Nutzer diese Nummer verwenden. Die Funktionen in TextClassifier ersetzen die Funktionen der Klasse Linkify.

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

Vorab-ART-Konvertierung von DEX-Dateien

Auf Geräten mit Android 9 oder höher: (ART) optimiert die komprimierte Dalvik Executable-Datei durch den vorzeitigen Compiler DEX-Dateien zu formatieren, indem Sie die DEX-Dateien in einem App-Paket in ein kompakte Darstellung. Dadurch kann Ihre App schneller gestartet werden und benötigt weniger Speicherplatz und RAM.

Diese Verbesserung kommt vor allem Low-End-Geräten mit langsameren Laufwerk-E/A-Geschwindigkeiten zugute.

System-Tracing auf dem Gerät

Mit Android 9 können Sie System-Traces von Ihrem Gerät aufzeichnen, und geben Sie einen Bericht zu diesen Aufzeichnungen an Ihr Entwicklungsteam weiter. Dieser Bericht wird in mehreren Formaten unterstützt, darunter HTML.

Wenn Sie diese Protokolle erfassen, können Sie Zeitdaten zu den Prozessen und Threads Ihrer App erfassen und sich andere Arten von global relevanten Gerätestatus ansehen.

Weitere Informationen zu diesem Tool findest du unter System auf dem Gerät ausführen Tracing