Funktionen und APIs unter Android 10

Android 10 bietet Nutzern und Entwicklern tolle Funktionen und Möglichkeiten. In diesem Dokument wird beschrieben, was für Entwickler verfügbar ist.

Informationen zu den APIs findest du im API-Diff-Bericht oder in der Android API-Referenz. Suche nach APIs, die „in API-Level 29 hinzugefügt“ wurden. Sehen Sie sich auch die Verhaltensänderungen in Android 10 (für Apps, die auf API-Level 29 ausgerichtet sind, und für alle Apps) sowie die Änderungen am Datenschutz an, um zu erfahren, in welchen Bereichen sich Plattformänderungen auf Ihre Apps auswirken können.

Erhöhte Sicherheit

Android 10 bietet eine Reihe von Sicherheitsfunktionen, die in den folgenden Abschnitten zusammengefasst sind.

Verbesserte Dialoge für die biometrische Authentifizierung

In Android 10 wurden die folgenden Verbesserungen an der Unterstützung der biometrischen Authentifizierung vorgenommen:

  • Eine Prüfung der biometrischen Authentifizierung.
  • Ein Fallback-Mechanismus, mit dem sich Nutzer mit der PIN, dem Muster oder dem Passwort ihres Geräts authentifizieren können, wenn sie sich nicht mit ihren biometrischen Daten authentifizieren können.
  • Ein Hinweis, der dem System mitteilt, dass nach der Authentifizierung des Nutzers mit einer impliziten biometrischen Modalität keine Bestätigung durch den Nutzer erforderlich ist. Sie können dem System beispielsweise mitteilen, dass nach der Authentifizierung eines Nutzers per Gesichtserkennung keine weitere Bestätigung erforderlich ist.

Eingebetteten DEX-Code direkt über das APK ausführen

Ab Android 10 können Sie die Plattform anweisen, eingebetteten DEX-Code direkt aus der APK-Datei Ihrer App auszuführen. Diese Option kann helfen, einen Angriff zu verhindern, falls ein Angreifer den lokal kompilierten Code auf dem Gerät manipuliert.

Weitere Informationen finden Sie unter Eingebetteten DEX-Code direkt aus dem APK ausführen.

TLS 1.3-Unterstützung

Android 10 bietet Unterstützung für TLS 1.3. TLS 1.3 ist eine wichtige Überarbeitung des TLS-Standards, die Leistungsvorteile und erweiterte Sicherheit bietet. Unsere Benchmarks zeigen, dass sichere Verbindungen mit TLS 1.3 bis zu 40 % schneller hergestellt werden können als mit TLS 1.2.

Weitere Informationen zur Implementierung von TLS 1.3 finden Sie im Abschnitt zu TLS auf der Seite mit Verhaltensänderungen für alle Apps.

Öffentliche Conscrypt API

Seit Android 10 enthält der Conscrypt-Sicherheitsanbieter eine öffentliche API für TLS-Funktionen.

Die Sammlung von Klassen unter android.net.ssl enthält statische Methoden für den Zugriff auf Funktionen, die nicht über die generischen javax.net.ssl APIs verfügbar sind. Die Namen für diese Klassen können als Plural der entsprechenden javax.net.ssl-Klasse abgeleitet werden. Beispielsweise kann Code, der mit Instanzen von javax.net.ssl.SSLSocket arbeitet, stattdessen Methoden aus SSLSockets verwenden.

Konnektivitätsfunktionen

Android 10 enthält mehrere Verbesserungen im Zusammenhang mit Netzwerken und Konnektivität.

API für WLAN-Verbindung

Android 10 bietet Unterstützung für Peer-to-Peer-Verbindungen. Mit dieser Funktion kann Ihre App den Nutzer auffordern, den Zugriffspunkt zu ändern, mit dem das Gerät verbunden ist. Dazu wird WifiNetworkSpecifier verwendet, um die Attribute eines angeforderten Netzwerks zu beschreiben. Die Peer-to-Peer-Verbindung wird für Zwecke verwendet, die nicht mit der Netzwerkbereitstellung zusammenhängen, z. B. für die Bootstrapping-Konfiguration für sekundäre Geräte wie Chromecast- und Google Home-Hardware.

Weitere Informationen findest du unter WLAN-Netzwerkanfrage-API für Peer-to-Peer-Konnektivität.

API für WLAN-Vorschläge

Unter Android 10 kann Ihre App den Nutzer auffordern, eine Verbindung zu einem WLAN-Zugangspunkt herzustellen. Sie können Vorschläge dazu machen, mit welchem Netzwerk eine Verbindung hergestellt werden soll. Die Plattform wählt letztendlich anhand der Eingaben von deiner und anderen Apps aus, welcher Zugangspunkt akzeptiert wird.

Weitere Informationen zu dieser Funktion findest du unter WLAN-Vorschläge.

Verbesserungen der WLAN-Modi für hohe Leistung und niedrige Latenz

Unter Android 10 kannst du dem zugrunde liegenden Modem einen Hinweis geben, um die Latenz zu minimieren.

Android 10 erweitert die Wi-Fi Lock API, um den Hochleistungsmodus und den Modus für geringe Latenzzeit effektiv zu unterstützen. Der WLAN-Energiesparmodus ist für den Hochleistungsmodus und den Modus für geringe Latenzzeit deaktiviert. Je nach Modemunterstützung kann im Modus für geringe Latenzzeit eine weitere Latenzoptimierung aktiviert werden.

Der Modus für geringe Latenzzeit ist nur aktiviert, wenn die Anwendung, die die Sperre erwirbt, im Vordergrund ausgeführt wird und das Display eingeschaltet ist. Der Modus für geringe Latenz ist besonders hilfreich für Echtzeit-Gaming-Anwendungen auf Mobilgeräten.

Spezialisierte Suchvorgänge im DNS-Resolver

Android 10 bietet native Unterstützung für spezielle DNS-Lookups, sowohl mit Klartext-Lookups als auch im DNS-over-TLS-Modus. Bisher unterstützte der DNS-Resolver der Plattform nur A- und AAAA-Einträge, mit denen nur die mit einem Namen verknüpften IP-Adressen gesucht werden konnten. Andere Eintragstypen wurden nicht unterstützt. Die DnsResolver API bietet eine generische, asynchrone Auflösung, mit der Sie SRV, NAPTR und andere Eintragstypen abfragen können. Beachten Sie, dass das Parsen der Antwort von der App durchgeführt werden muss.

Informationen zu NDK-basierten Apps finden Sie unter android_res_nsend.

Wi-Fi Easy Connect

Mit Android 10 kannst du Easy Connect verwenden, um WLAN-Anmeldedaten auf einem Peer-Gerät bereitzustellen. Dies ersetzt WPS, das eingestellt wurde. Apps können Easy Connect mithilfe des Intents ACTION_PROCESS_WIFI_EASY_CONNECT_URI in ihren Einrichtungs- und Bereitstellungsablauf einbinden.

Weitere Informationen zu dieser Funktion findest du unter Wi-Fi Easy Connect.

API für Wi-Fi Direct-Verbindungen

Die API-Klassen WifiP2pConfig und WifiP2pManager wurden in Android 10 aktualisiert, um die Möglichkeit zu bieten, mithilfe vordefinierter Informationen schnell eine Verbindung zu Wi-Fi Direct herzustellen. Diese Informationen werden über einen Seitenkanal wie Bluetooth oder NFC weitergegeben.

Im folgenden Codebeispiel wird gezeigt, wie Sie eine Gruppe mit vordefinierten Informationen erstellen:

Kotlin

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
val channel = manager.initialize(this, mainLooper, null)

// prefer 5G band for this group
val config = WifiP2pConfig.Builder()
    .setNetworkName("networkName")
    .setPassphrase("passphrase")
    .enablePersistentMode(false)
    .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
    .build()

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null)

Java

WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
Channel channel = manager.initialize(this, getMainLooper(), null);

// prefer 5G band for this group
WifiP2pConfig config = new WifiP2pConfig.Builder()
.setNetworkName("networkName")
.setPassphrase("passphrase")
.enablePersistentMode(false)
.setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
.build();

// create a non-persistent group on 5GHz
manager.createGroup(channel, config, null);

Wenn Sie einer Gruppe mit Anmeldedaten beitreten möchten, ersetzen Sie manager.createGroup() durch Folgendes:

Kotlin

manager.connect(channel, config, null)

Java

manager.connect(channel, config, null);

Verbindungsorientierte Kanäle (CoC) für Bluetooth LE

Mit Android 10 kann deine App BLE-CoC-Verbindungen verwenden, um größere Datenstreams zwischen zwei BLE-Geräten zu übertragen. Diese Schnittstelle abstrahiert Bluetooth und Verbindungsmechanismen, um die Implementierung zu vereinfachen.

Telefoniefunktionen

Android 10 enthält mehrere Verbesserungen im Bereich Telefonie.

Verbesserung der Anrufqualität

Unter Android 10 können auf Geräten, die diese Funktion unterstützen, Informationen zur Qualität laufender IMS-Anrufe (IP Multimedia Subsystem) erfasst werden, einschließlich der Qualität zum und vom Netzwerk.

Anruf-Filter und Anrufer-ID

Android 10 bietet deiner App die Möglichkeit, Anrufe, die nicht im Adressbuch des Nutzers enthalten sind, als potenzielle Spamanrufe zu identifizieren und Spamanrufe im Namen des Nutzers lautlos abzulehnen. Informationen zu diesen blockierten Anrufen werden in der Anrufliste als blockierte Anrufe protokolliert, um dem Nutzer mehr Transparenz zu bieten, wenn er verpasste Anrufe hat. Wenn du diese API verwendest, musst du nicht mehr die Berechtigung READ_CALL_LOG vom Nutzer einholen, um die Funktionen „Anruf-Filter“ und „Anrufer-ID“ bereitzustellen.

API für Anrufweiterleitungsdienst

In Android 10 wurde die Verarbeitung von Anruf-Intents geändert. Der Broadcast NEW_OUTGOING_CALL wurde verworfen und durch die API CallRedirectionService ersetzt. Die CallRedirectionService API bietet Schnittstellen, mit denen Sie ausgehende Anrufe der Android-Plattform ändern können. Beispielsweise können Drittanbieter-Apps Anrufe abbrechen und über VoIP umleiten.

Verbesserungen beim Erstellen von Dateien auf externen Speichern

Zusätzlich zur Einführung des begrenzten Speichers bietet Android 10 die folgenden Funktionen für den externen Speicher:

  • Mit dem Flag IS_PENDING kannst du deiner App exklusiven Zugriff auf eine Mediendatei gewähren, während sie auf das Laufwerk geschrieben wird.
  • Wenn Sie einen bestimmten Speicherort für Dateien kennen, können Sie dem System einen Hinweis geben, wo die neu geschriebenen Dateien gespeichert werden sollen.
  • Jedes externe Speichergerät hat einen eindeutigen Volume-Namen.

Medien und Grafiken

In Android 10 werden die folgenden neuen Medien- und Grafikfunktionen und ‑APIs eingeführt:

Audioeingabe wird freigegeben

In Android 10 können zwei Apps gleichzeitig auf den Audioeingang zugreifen. Ausführliche Informationen finden Sie unter Audioeingabe freigeben.

Aufnahme der Audiowiedergabe

Unter Android 10 kann eine App die Audiowiedergabe anderer Apps aufnehmen. Ausführliche Informationen finden Sie unter Wiedergabe aufzeichnen.

Suchleiste in MediaStyle-Benachrichtigungen

Ab Android 10 wird in MediaStyle-Benachrichtigungen eine Suchleiste angezeigt. Die Suchleiste zeigt den Wiedergabefortschritt von PlaybackState.getPosition() an. In einigen Fällen kann die Suchleiste verwendet werden, um zu einer Stelle im wiedergegebenen Programm zu springen. Das Aussehen und Verhalten der Suchleiste wird durch die folgenden Regeln gesteuert:

  • Die Suchleiste wird angezeigt, wenn ein aktiver MediaSession vorhanden ist und seine Dauer (angegeben durch MediaMetadata.METADATA_KEY_DURATION) größer als null ist. Das bedeutet, dass die Leiste bei unbestimmten Streams wie Livestreams und Radiosendungen nicht angezeigt wird.
  • Wenn die Sitzung ACTION_SEEK_TO implementiert, kann der Nutzer die Suchleiste ziehen, um die Wiedergabeposition zu steuern.

Native MIDI API

Mit der Android Native MIDI API (AMidi) können App-Entwickler MIDI-Daten mit C/C++-Code senden und empfangen. Dadurch wird die API enger in die C/C++-Audio-/Steuerungslogik eingebunden und die Notwendigkeit von JNI minimiert.

Weitere Informationen findest du unter Android Native MIDI API.

Verbesserungen bei MediaCodecInfo

In Android 10 werden MediaCodecInfo Methoden hinzugefügt, die mehr Informationen zu einem Codec liefern.

Weitere Informationen finden Sie unter Mediencodecs.

Thermal API

Wenn Geräte zu warm werden, drosseln sie möglicherweise die CPU und/oder GPU, was sich auf unerwartete Weise auf Apps und Spiele auswirken kann. Bei Apps mit komplexen Grafiken, hohem Rechenaufwand oder anhaltender Netzwerkaktivität ist die Wahrscheinlichkeit höher, dass Probleme auftreten. Diese können je nach Chipsatz und Kernfrequenzen, Integrationsgrad sowie Geräteverpackung und Formfaktor variieren.

In Android 10 können Apps und Spiele eine Thermal API verwenden, um Änderungen auf dem Gerät zu überwachen und Maßnahmen zu ergreifen, um den Energieverbrauch zu senken und die normale Temperatur wiederherzustellen. Apps registrieren einen Listener in PowerManager, über den das System den aktuellen thermischen Status meldet. Dieser reicht von leicht und mäßig bis schwer, kritisch, Notfall und Herunterfahren.

Wenn das Gerät thermische Belastung meldet, können Apps und Spiele helfen, indem sie laufende Aktivitäten reduzieren, um den Stromverbrauch auf verschiedene Weise zu senken. Streaming-Apps könnten beispielsweise die Auflösung/Bitrate oder den Netzwerkverkehr reduzieren, eine Kamera-App könnte den Blitz oder die intensive Bildoptimierung deaktivieren, ein Spiel könnte die Framerate oder die Polygon-Tessellierung reduzieren, eine Medien-App könnte die Lautstärke des Lautsprechers reduzieren und eine Karten-App könnte das GPS deaktivieren.

Die Thermal API erfordert eine neue Geräte-HAL-Ebene. Sie wird derzeit auf Pixel-Geräten mit Android 10 unterstützt. Wir arbeiten mit unseren Gerätehersteller-Partnern zusammen, um die Unterstützung so schnell wie möglich auf das gesamte Ökosystem auszuweiten.

Kamera und Bilder

In Android 10 werden die folgenden neuen Kamera- und Bildfunktionen eingeführt:

Unterstützung für monochrome Kameras

Mit Android 9 (API-Level 28) wurde die Funktion für monochrome Kameras eingeführt. Android 10 bietet mehrere Verbesserungen für die Unterstützung von Monochromkameras:

  • Unterstützung des Y8-Streamformats zur Verbesserung der Speichereffizienz.
  • Unterstützung für die Aufnahme von monochromen RAW-DNG-Bildern.
  • Einführung von MONO- und NIR-CFA-Aufzählungen, um zwischen normalen Monochromkameras und Nahinfrarotkameras zu unterscheiden.

Mit dieser Funktion kannst du ein natives Schwarz-Weiß-Bild aufnehmen. Ein logisches Gerät mit mehreren Kameras kann eine Monochromkamera als physische Subkamera verwenden, um eine bessere Bildqualität bei schlechten Lichtverhältnissen zu erzielen.

Dynamic Depth Format

Ab Android 10 können Kameras die Tiefendaten für ein Bild in einer separaten Datei speichern. Dazu wird ein neues Schema namens Dynamic Depth Format (DDF) verwendet. Apps können sowohl das JPG-Bild als auch die zugehörigen Tiefenmetadaten anfordern und diese Informationen verwenden, um in der Nachbearbeitung eine beliebige Unschärfe anzuwenden, ohne die ursprünglichen Bilddaten zu ändern.

Die Spezifikation für dieses Format finden Sie unter Dynamic Depth Format.

High Efficiency Image File Format

Das HEIF-Format (High Efficiency Image File) ist ein Standardbild- und -videoformat, das im Vergleich zu anderen Dateiformaten eine höhere Codierungsqualität und eine kleinere Dateigröße bietet.

Weitere Informationen zum Dateiformat finden Sie unter HEIC.

Verbesserungen bei mehreren Kameras

Android 10 verbessert die Zusammenführung mehrerer Kameras zu einer einzigen logischen Kamera, eine Funktion, die in Android 9 (API-Level 28) eingeführt wurde. Die folgenden Funktionen wurden der Camera2 API hinzugefügt:

Accessibility Services API

In Android 10 werden die folgenden neuen Funktionen und APIs für Bedienungshilfen eingeführt:

AccessibilityNodeInfo-Eingabetasten-Flag

Ab Android 10 können Sie isTextEntryKey() aufrufen, um festzustellen, ob ein bestimmter AccessibilityNodeInfo eine Taste für die Texteingabe darstellt, die Teil einer Tastatur oder eines Tastenfelds ist.

Gesprochenes Feedback im Dialogfeld „Bedienungshilfen“

Wenn Nutzer die Tastenkombination für Bedienungshilfen verwenden müssen, um einen Bedienungshilfe-Dienst zu starten, kann der Dialog in Android 10 auf Anfrage des Dienstes von einer Text-zu-Sprache-Ansage begleitet werden.

Kurzbefehl für Bedienungshilfen bei aktivierter Bedienung über Gesten

Wenn die Bedienung über Gesten in Android 10 aktiviert ist, ist der Button „Bedienungshilfen“ nicht sichtbar oder auswählbar. Um auf das Menü für Bedienungshilfen zuzugreifen, müssen Nutzer eine der folgenden Gesten ausführen:

  • Mit zwei Fingern nach oben wischen.
  • Mit zwei Fingern nach oben wischen und halten.

Kurzbefehl für Bedienungshilfen auf physischen Tastaturen

In Android 10 können Nutzer den Kurzbefehl für Bedienungshilfen auf einer physischen Tastatur auslösen, indem sie Strg + Alt + Z drücken.

Verbesserung der Bildschirmtastatur-Steuerung

Unter Android 10 können Bedienungshilfen anfordern, dass die Bildschirmtastatur auch dann angezeigt wird, wenn das Gerät eine angeschlossene physische Tastatur erkennt. Nutzer können dieses Verhalten überschreiben.

Benutzerdefinierte Zeitlimits für Bedienungshilfen

Mit Android 10 wird die getRecommendedTimeoutMillis() API eingeführt. Diese Methode bietet Unterstützung für benutzerdefinierte Zeitlimits für interaktive und nicht interaktive UI-Elemente. Der Rückgabewert wird sowohl von den Nutzereinstellungen als auch von den APIs für Bedienungshilfen beeinflusst.

Verbesserungen bei Autofill

Android 10 enthält die folgenden Verbesserungen für den Autofill-Service.

Kompatibilitätsbezogene Autofill-Anfragen

Mit dem Flag FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST können Sie feststellen, ob eine Autofill-Anfrage im Kompatibilitätsmodus generiert wurde.

Nutzername und Passwort gleichzeitig speichern

Sie können Fälle unterstützen, in denen eine Anwendung mehrere Aktivitäten verwendet, um Nutzernamen, Passwort und andere Felder anzuzeigen, indem Sie das Flag SaveInfo.FLAG_DELAY_SAVE verwenden.

Nutzerinteraktion mit der Benutzeroberfläche zum Speichern

Du kannst ein Passwortfeld in einem Dialogfeld zum Speichern ein- und ausblenden, indem du einen Aktions-Listener für das Dialogfeld festlegst und die Sichtbarkeit der entsprechenden Remote-Ansicht des Passworts änderst.

Unterstützung für die Aktualisierung von Datasets

Mit Autofill können vorhandene Passwörter aktualisiert werden. Wenn ein Nutzer beispielsweise bereits ein Passwort gespeichert hat und ein neues Passwort speichert, wird er von Autofill aufgefordert, das vorhandene Passwort zu aktualisieren, anstatt ein neues zu speichern.

Verbesserungen bei der Feldklassifizierung

Android 10 enthält die folgenden Verbesserungen an der Field Classification API.

UserData.Builder-Konstruktor

Der Konstruktor UserData.Builder wurde geändert, um ihn besser an das Builder-Muster anzupassen.

Zulassen, dass ein Wert mehreren Arten von Kategorie-IDs zugeordnet wird

Wenn Sie UserData.Builder in Android 10 verwenden, können Sie jetzt einen Wert mehreren Arten von Kategorie-IDs zuordnen. In früheren Versionen wurde eine Ausnahme ausgelöst, wenn ein Wert mehrmals hinzugefügt wurde.

Verbesserte Unterstützung für Kreditkartennummern

Die Feldklassifizierung kann jetzt vierstellige Zahlen als die letzten vier Ziffern einer Kreditkartennummer erkennen.

Unterstützung für die App-spezifische Feldklassifizierung

In Android 10 wird FillResponse.setUserData() hinzugefügt, mit dem Sie für die Dauer der Sitzung app-spezifische Nutzerdaten festlegen können. So kann der Autofill-Service Typen für Felder mit App-spezifischen Inhalten erkennen.

UI- und Systemsteuerelemente

Android 10 bietet die folgenden Verbesserungen der Benutzeroberfläche:

Unterstützung von JVMTI-PopFrame-Funktionen

Mit Android 10 wird die Unterstützung für die Funktion can_pop_frames in der Android-JVMTI-Implementierung hinzugefügt. Beim Debugging können Sie mit dieser Funktion Funktionen noch einmal ausführen, nachdem Sie an einem Haltepunkt angehalten und lokale, globale oder Implementierungen einer Funktion angepasst haben. Weitere Informationen finden Sie auf der Referenzseite zu Pop Frame von Oracle.

Surface Control API

Android 10 bietet eine SurfaceControl API für den Low-Level-Zugriff auf den System-Compositor (SurfaceFlinger). Für die meisten Nutzer ist SurfaceView die richtige Methode, um den Compositor zu nutzen. Die SurfaceControl API kann in bestimmten Fällen nützlich sein, z. B.:

  • Synchronisierung mehrerer Oberflächen
  • Prozessübergreifende Oberflächeneinbettung
  • Lebenszyklusverwaltung auf niedrigerer Ebene

Die SurfaceControl API ist sowohl in SDK- als auch in NDK-Bindungen verfügbar. Die NDK-Implementierung enthält eine API für den manuellen Austausch von Zwischenspeichern mit dem Compositor. Dies ist eine Alternative für Nutzer, die die Einschränkungen von BufferQueue erreicht haben.

Erkennung von hängenden WebView-Renderern

Mit Android 10 wird die abstrakte Klasse WebViewRenderProcessClient eingeführt, mit der Apps erkennen können, ob ein WebView nicht mehr reagiert. So verwenden Sie diese Klasse:

  1. Definieren Sie Ihre eigene Unterklasse und implementieren Sie die Methoden onRenderProcessResponsive() und onRenderProcessUnresponsive().
  2. Hängen Sie eine Instanz Ihres WebViewRenderProcessClient an ein oder mehrere WebView-Objekte an.
  3. Wenn der WebView nicht mehr reagiert, ruft das System die Methode onRenderProcessUnresponsive() des Clients auf und übergibt den WebView und den WebViewRenderProcess. (Wenn der WebView ein einzelner Prozess ist, ist der Parameter WebViewRenderProcess null.) Ihre App kann dann entsprechende Maßnahmen ergreifen, z. B. ein Dialogfeld anzeigen, in dem der Nutzer gefragt wird, ob er den Renderingprozess anhalten möchte.

Wenn der WebView weiterhin nicht reagiert, ruft das System regelmäßig onRenderProcessUnresponsive() auf (nicht öfter als einmal alle fünf Sekunden), führt aber keine weiteren Aktionen aus. Wenn die WebView wieder reagiert, ruft das System onRenderProcessResponsive() nur einmal auf.

Einstellungsbereiche

Mit Android 10 werden Einstellungsbereiche eingeführt. Über diese API können Apps Nutzern Einstellungen im Kontext der App anzeigen. So müssen Nutzer nicht die Einstellungen aufrufen, um beispielsweise NFC oder Mobile Daten zu ändern, um die App zu verwenden.

Abbildung 1. Der Nutzer versucht, eine Webseite zu öffnen, während das Gerät nicht mit dem Netzwerk verbunden ist. In Chrome wird das Einstellungsfeld Internetverbindung angezeigt…

Abbildung 2. Der Nutzer kann das WLAN aktivieren und ein Netzwerk auswählen, ohne die Chrome App zu verlassen.

Angenommen, ein Nutzer öffnet einen Webbrowser, während sich sein Gerät im Flugmodus befindet. Vor Android 10 konnte die App nur eine allgemeine Meldung anzeigen, in der der Nutzer aufgefordert wurde, die Einstellungen zu öffnen, um die Verbindung wiederherzustellen. Unter Android 10 kann die Browser-App ein Inline-Bedienfeld mit wichtigen Verbindungseinstellungen wie Flugmodus, WLAN (einschließlich Netzwerken in der Nähe) und mobilen Daten anzeigen. Über dieses Steuerfeld können Nutzer die Verbindung wiederherstellen, ohne die App zu verlassen.

Wenn du ein Einstellungsfeld anzeigen möchtest, löse einen Intent mit einer der folgenden Settings.Panel-Aktionen aus:

Kotlin

val panelIntent = Intent(Settings.Panel.settings_panel_type)
startActivityForResult(panelIntent)

Java

Intent panelIntent = new Intent(Settings.Panel.settings_panel_type);
startActivityForResult(panelIntent);

settings_panel_type kann einer der folgenden Werte sein:

ACTION_INTERNET_CONNECTIVITY
Zeigt Einstellungen für die Internetverbindung an, z. B. Flugmodus, WLAN und mobile Daten.
ACTION_WIFI
Zeigt die WLAN-Einstellungen, aber nicht die anderen Verbindungseinstellungen an. Das ist nützlich für Apps, die eine WLAN-Verbindung benötigen, um große Uploads oder Downloads durchzuführen.
ACTION_NFC
Zeigt alle Einstellungen im Zusammenhang mit der Nahfeldkommunikation (NFC) an.
ACTION_VOLUME
Zeigt die Lautstärkeeinstellungen für alle Audiostreams an.

Verbesserungen bei der Freigabe

Android 10 bietet eine Reihe von Verbesserungen für die Freigabe:

Sharing Shortcuts API

Die Sharing Shortcuts API ersetzt die Direct Share APIs.

Anstatt Ergebnisse reaktiv bei Bedarf abzurufen, können Apps mit der Sharing Shortcuts API im Voraus direkte Freigabeziele veröffentlichen. So funktioniert der ShortcutManager. Da die beiden APIs ähnlich sind, haben wir die ShortcutInfo API erweitert, um die Verwendung beider Funktionen zu vereinfachen. Mit der Sharing Shortcuts API können Sie einem Freigabeziel direkt Kategorien oder Personen zuweisen. Die Freigabeziele bleiben im System erhalten, bis sie von derselben App aktualisiert werden oder die App deinstalliert wird.

Der ältere Direct Share-Mechanismus funktioniert weiterhin, aber Apps, die ihn verwenden, haben eine niedrigere Priorität als Apps, die die Sharing Shortcuts API verwenden.

ShortcutInfo.Builder fügt Methoden hinzu und verbessert sie, um zusätzliche Informationen zum Freigabeziel bereitzustellen.

„Direct Share“-Ziele

Sie können eine dynamische Verknüpfung als Ziel für die Direktfreigabe veröffentlichen. Weitere Informationen finden Sie unter „Direct Share“-Ziele veröffentlichen.

ShortcutManagerCompat ist eine neue AndroidX API, die Abwärtskompatibilität mit der alten DirectShare API bietet. Dies ist die bevorzugte Methode zum Veröffentlichen von Freigabezielen.

Vorschautext

Wenn eine App Textinhalte teilt, kann sie eine optionale Vorschau der Inhalte in der Sharesheet-Benutzeroberfläche anzeigen.

Siehe RTF-Vorschauen hinzufügen.

Weitere Informationen

Weitere Informationen dazu, wie Apps Daten freigeben können, finden Sie unter Einfache Daten an andere Apps senden und Einfache Daten von anderen Apps empfangen.

Dunkles Design

Android 10 bietet ein dunkles Design, das sowohl für die Android-System-UI als auch für Apps auf dem Gerät gilt. Ausführliche Informationen finden Sie unter Dunkles Design.

Arten von Diensten im Vordergrund

Mit Android 10 wird das XML-Manifestattribut foregroundServiceType eingeführt, das Sie in die Definition mehrerer spezifischer Dienste einfügen. Es ist möglich, einem bestimmten Dienst im Vordergrund mehrere Typen zuzuweisen, dies ist jedoch selten sinnvoll.

In der folgenden Tabelle sind die verschiedenen Typen von Diensten im Vordergrund und die Dienste aufgeführt, für die es sinnvoll ist, einen bestimmten Typ zu deklarieren:

Typ des Diensts im Vordergrund Anwendungsbeispiel für einen Dienst, der diesen Typ deklarieren sollte
connectedDevice Fitness-Tracker überwachen
dataSync Dateien aus einem Netzwerk herunterladen
location Eine vom Nutzer initiierte Aktion fortsetzen
mediaPlayback Hörbuch, Podcast oder Musik abspielen
mediaProjection Nehmen Sie ein kurzes Video des Displays auf.
phoneCall Aktiven Anruf verwalten

Kotlin

Android 10 enthält die folgenden Updates für die Kotlin-Entwicklung.

Null-Zulässigkeits-Annotationen für libcore APIs

Android 10 verbessert die Abdeckung von Null-Zulässigkeits-Annotationen im SDK für libcore-APIs. Diese Annotationen ermöglichen es App-Entwicklern, die in Android Studio entweder die Kotlin- oder die Java-Null-Zulässigkeitsanalyse verwenden, Informationen zur Nullness zu erhalten, wenn sie mit diesen APIs interagieren.

Normalerweise führen Verstöße gegen die Null-Zulässigkeit in Kotlin zu Kompilierungsfehlern. Um die Kompatibilität mit Ihrem vorhandenen Code zu gewährleisten, werden nur die Annotationen @RecentlyNullable und @RecentlyNonNull hinzugefügt. Das bedeutet, dass Verstöße gegen die Null-Zulässigkeit zu Warnungen statt zu Fehlern führen.

Außerdem werden alle @RecentlyNullable- oder @RecentlyNonNull-Anmerkungen, die in Android 9 hinzugefügt wurden, in @Nullable bzw. @NonNull geändert. Das bedeutet, dass Verstöße gegen die Null-Zulässigkeit in Android 10 und höher zu Fehlern statt zu Warnungen führen.

Weitere Informationen zu Änderungen an Annotationen finden Sie im Blog für Android-Entwickler im Artikel Android Pie SDK is now more Kotlin-friendly.

NDK

Android 10 enthält die folgenden NDK-Änderungen.

Verbessertes Debugging der Eigentümerschaft von Dateideskriptoren

In Android 10 wurde fdsan hinzugefügt, mit dem Sie Probleme mit der Inhaberschaft von Dateideskriptoren leichter finden und beheben können.

Fehler im Zusammenhang mit der falschen Handhabung der Dateideskriptor-Inhaberschaft, die sich in der Regel als Use-After-Close und Double-Close äußern, sind analog zu den Fehlern Use-After-Free und Double-Free bei der Arbeitsspeicherzuweisung, lassen sich aber in der Regel viel schwieriger diagnostizieren und beheben. fdsan versucht, die falsche Handhabung von Dateideskriptoren zu erkennen und/oder zu verhindern, indem die Dateideskriptor-Inhaberschaft erzwungen wird.

Weitere Informationen zu Abstürzen im Zusammenhang mit diesen Problemen finden Sie unter Von fdsan erkannter Fehler. Weitere Informationen zu fdsan finden Sie auf der Googlesource-Seite zu fdsan.

ELF-TLS

Anwendungen, die mit dem NDK mit einem Mindest-API-Level von 29 erstellt wurden, können ELF TLS anstelle von emutls verwenden. Die Unterstützung für dynamische und statische Linker wurde hinzugefügt, um diese Methode zur Verarbeitung von Thread-lokalen Variablen zu unterstützen.

Für Apps, die für API-Level 28 und niedriger entwickelt wurden, wurden Verbesserungen für libgcc/compiler-rt implementiert, um einige emutls-Probleme zu umgehen.

Weitere Informationen finden Sie unter Android-Änderungen für NDK-Entwickler.

Laufzeit

Android 10 enthält die folgende Laufzeitänderung.

Mallinfo-basierte Auslösung der automatischen Speicherbereinigung

Wenn kleine Java-Plattformobjekte auf riesige Objekte im C++-Heap verweisen, können die C++-Objekte oft nur dann freigegeben werden, wenn das Java-Objekt erfasst und beispielsweise finalisiert wird. In früheren Versionen hat die Plattform die Größe vieler C++-Objekte geschätzt, die mit Java-Objekten verknüpft sind. Diese Schätzung war nicht immer genau und führte gelegentlich zu einer stark erhöhten Arbeitsspeichernutzung, da die Plattform die automatische Speicherbereinigung nicht wie vorgesehen durchführte.

In Android 10 verfolgt der Garbage Collector (GC) die Gesamtgröße des vom Systemmalloc() zugewiesenen Heaps, um sicherzustellen, dass große malloc()-Heap-Zuweisungen immer in GC-auslösende Berechnungen einbezogen werden. Bei Apps, die eine große Anzahl von C++-Zuweisungen mit der Java-Ausführung verschachteln, kann sich die Häufigkeit der automatischen Speicherbereinigung erhöhen. Bei anderen Apps kann es zu einem leichten Rückgang kommen.

Testen und Fehler beheben

Android 10 enthält die folgenden Verbesserungen für Tests und Fehlerbehebung.

Verbesserungen für das System-Tracing auf dem Gerät

Ab Android 10 können Sie Limits für die Größe und Dauer eines Traces festlegen, wenn Sie einen System-Trace auf dem Gerät ausführen. Wenn Sie einen der beiden Werte angeben, führt das System einen langen Trace aus und kopiert den Trace-Zwischenspeicher regelmäßig in die Zieldatei, während der Trace aufgezeichnet wird. Der Trace wird abgeschlossen, wenn die von Ihnen angegebenen Größen- oder Dauerlimits erreicht sind.

Mit diesen zusätzlichen Parametern können Sie andere Anwendungsfälle als mit einem Standard-Trace testen. Beispielsweise können Sie einen Leistungsfehler diagnostizieren, der nur auftritt, wenn Ihre Anwendung schon lange ausgeführt wird. In diesem Fall könntest du einen langen Trace über einen ganzen Tag aufzeichnen und dann den CPU-Planer, die Laufwerksaktivität, die App-Threads und andere Daten im Bericht analysieren, um die Ursache des Fehlers zu ermitteln.

In Android 10 und höher werden Trace-Dateien in einem Format gespeichert, das mit Perfetto geöffnet werden kann, einem Open-Source-Projekt für Leistungsmessung und Tracing. Sie können Perfetto-Trace-Dateien in das Systrace-Format konvertieren.

Verbesserungen am TextClassifier

Android 10 bietet zusätzliche Funktionen zur Textklassifizierung in der Schnittstelle TextClassifier.

Spracherkennung

Die Methode detectLanguage() funktioniert ähnlich wie bereits vorhandene Klassifizierungsmethoden. Sie empfängt ein TextLanguage.Request-Objekt und gibt ein TextLanguage-Objekt zurück.

TextLanguage-Objekte bestehen aus einer Liste geordneter Paare. Jedes Paar enthält eine Sprache und einen entsprechenden Konfidenzwert für die Klassifizierung.

Vorgeschlagene Unterhaltungsaktionen

Die Methode suggestConversationActions() funktioniert ähnlich wie vorhandene Klassifizierungsmethoden. Sie empfängt ein ConversationActions.Request-Objekt und gibt ein ConversationActions-Objekt zurück.

ConversationActions-Objekte bestehen aus einer Liste von ConversationAction-Objekten. Jedes ConversationAction-Objekt enthält eine mögliche vorgeschlagene Aktion und den zugehörigen Konfidenzwert.

Intelligente Antworten/Aktionen in Benachrichtigungen

Mit Android 9 wurde die Möglichkeit eingeführt, Antwortvorschläge in einer Benachrichtigung anzuzeigen. Android 10 erweitert dies um die Möglichkeit, vorgeschlagene Intent-basierte Aktionen einzubeziehen. Außerdem kann die Plattform diese Vorschläge automatisch generieren. Apps können weiterhin eigene Vorschläge machen oder systemgenerierte Vorschläge deaktivieren.

Die API, die zum Generieren dieser Antworten verwendet wird, ist Teil von TextClassifier und wurde in Android 10 auch direkt für Entwickler verfügbar gemacht. Weitere Informationen findest du im Abschnitt zu Verbesserungen am TextClassifier.

Wenn deine App eigene Vorschläge bereitstellt, generiert die Plattform keine automatischen Vorschläge. Wenn du nicht möchtest, dass in den Benachrichtigungen deiner App Antwortvorschläge oder vorgeschlagene Aktionen angezeigt werden, kannst du die vom System generierten Antworten und Aktionen mit setAllowGeneratedReplies() und setAllowSystemGeneratedContextualActions() deaktivieren.