Android 10-Funktionen und -APIs

Android 10 bietet tolle Funktionen für Nutzer und Entwickler. In diesem Dokument wird erläutert, welche Funktionen für Entwickler verfügbar sind.

Weitere Informationen zu den APIs finden Sie im Bericht „API-Unterschiede“ oder in der Android API-Referenz. Suchen Sie dort nach APIs, die „in API-Ebene 29 hinzugefügt“ wurden. Sieh dir auch die Verhaltensänderungen bei Android 10 (für Apps, die auf API-Level 29 ausgerichtet sind und für alle Apps) sowie die Datenschutzänderungen an, um zu erfahren, in welchen Bereichen sich Änderungen an der Plattform auf deine Apps auswirken können.

Erhöhte Sicherheit

In Android 10 werden eine Reihe von Sicherheitsfunktionen eingeführt, die in den folgenden Abschnitten zusammengefasst werden.

Verbesserte Dialogfelder für die biometrische Authentifizierung

Mit Android 10 werden die folgenden Verbesserungen für die Unterstützung der biometrischen Authentifizierung eingeführt:

  • Prüfung der Fähigkeit zur biometrischen Authentifizierung.
  • Ein Fallback-Mechanismus, der es einem Nutzer ermöglicht, sich mit seiner Geräte-PIN, seinem Muster oder seinem Passwort zu authentifizieren, wenn er sich nicht über seine biometrische Eingabe authentifizieren kann.
  • Ein Hinweis, der das System anweist, keine Bestätigung durch den Nutzer zu verlangen, nachdem sich der Nutzer mit einer impliziten biometrischen Modalität authentifiziert hat. Sie können dem System beispielsweise mitteilen, dass nach der Authentifizierung per Gesichtserkennung keine weitere Bestätigung erforderlich ist.

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

Ab Android 10 kannst du die Plattform anweisen, eingebetteten DEX-Code direkt aus der APK-Datei deiner App auszuführen. Diese Option kann dazu beitragen, einen Angriff zu verhindern, falls ein Angreifer jemals den lokal kompilierten Code auf dem Gerät manipuliert hat.

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

Unterstützung für TLS 1.3

Android 10 unterstützt jetzt TLS 1.3. TLS 1.3 ist eine wesentliche Überarbeitung des TLS-Standards mit Leistungsvorteilen und erhöhter Sicherheit. Laut unseren Benchmarks können sichere Verbindungen mit TLS 1.3 im Vergleich zu TLS 1.2 um bis zu 40 % schneller hergestellt werden.

Weitere Informationen zu unserer Implementierung von TLS 1.3 finden Sie auf der Seite zu den Verhaltensänderungen bei allen Apps im Abschnitt zu TLS.

Public Conscrypt API

Ab Android 10 umfasst der Conscrypt-Sicherheitsanbieter eine öffentliche API für TLS-Funktionen.

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

Konnektivitätsfunktionen

Android 10 umfasst mehrere Verbesserungen in Bezug auf Netzwerk und Konnektivität.

API für die WLAN-Netzwerkverbindung

Android 10 unterstützt jetzt Peer-to-Peer-Verbindungen. Mit dieser Funktion kann Ihre App den Nutzer auffordern, den Zugangspunkt, mit dem das Gerät verbunden ist, zu ändern. Dazu werden mit WifiNetworkSpecifier die Eigenschaften eines angeforderten Netzwerks beschrieben. Die Peer-to-Peer-Verbindung wird nicht für die Netzwerkbereitstellung verwendet, z. B. für die Bootstrapping-Konfiguration für sekundäre Geräte wie Chromecast und Google Home-Hardware.

Weitere Informationen finden Sie unter Wi-Fi Network Request API für Peer-to-Peer-Verbindungen.

API für WLAN-Vorschläge

Android 10 unterstützt deine App, um den Nutzer aufzufordern, eine Verbindung zu einem WLAN-Zugangspunkt herzustellen. Sie können Vorschläge machen, zu welchem Netzwerk eine Verbindung hergestellt werden soll. Die Plattform wählt den Zugangspunkt basierend auf den Eingaben Ihrer und anderen Apps letztendlich aus.

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

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

Mit 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 mit niedriger Latenz effektiv zu unterstützen. Der Energiesparmodus für das WLAN ist für den Hochleistungsmodus und den Modus mit niedriger Latenz deaktiviert. Je nach Unterstützung des Modems kann im Modus mit niedriger Latenz eine weitere Latenzoptimierung aktiviert werden.

Der Modus für geringe Latenzzeit wird nur aktiviert, wenn die Anwendung, für die die Sperre eingerichtet wurde, im Vordergrund ausgeführt wird und der Bildschirm eingeschaltet ist. Der Modus mit niedriger Latenz ist besonders hilfreich für Echtzeit-Spieleanwendungen für Mobilgeräte.

Spezialisierte Lookups im DNS-Resolver

Android 10 bietet native Unterstützung für spezielle DNS-Lookups sowohl mit Klartextsuchen als auch mit dem DNS-over-TLS-Modus. Bisher unterstützte der Plattform-DNS-Resolver nur A- und AAAA-Einträge, mit denen nur die mit einem Namen verknüpften IP-Adressen abgerufen werden konnten. Andere Eintragstypen wurden jedoch nicht unterstützt. Die DnsResolver API bietet eine generische, asynchrone Auflösung, sodass Sie nach SRV, NAPTR und anderen Datensatztypen suchen können. Das Parsen der Antwort bleibt von der Anwendung überlassen.

Informationen zu NDK-basierten Anwendungen finden Sie unter android_res_nsend.

WLAN Easy Connect

Mit Android 10 können Sie Easy Connect verwenden, um WLAN-Anmeldedaten auf einem Peer-Gerät als Ersatz für WPS bereitzustellen, das verworfen wurde. Apps können Easy Connect mithilfe des Intents ACTION_PROCESS_WIFI_EASY_CONNECT_URI in den Einrichtungs- und Bereitstellungsablauf einbinden.

Weitere Informationen zu dieser Funktion finden Sie unter Wi-Fi Easy Connect.

Wi-Fi Direct Connection API

Die API-Klassen WifiP2pConfig und WifiP2pManager wurden in Android 10 aktualisiert, um Funktionen für den schnellen Verbindungsaufbau zu Wi-Fi Direct unter Verwendung vorab festgelegter Informationen zu unterstützen. Diese Informationen werden über einen Seitenkanal wie Bluetooth oder NFC weitergegeben.

Das folgende Codebeispiel zeigt, 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 Bluetooth LE-Kanäle (CoC)

Mit Android 10 kann Ihre 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 umfasst mehrere Verbesserungen im Bereich Telefonie.

Verbesserte Anrufqualität

Mit Android 10 wird die Möglichkeit hinzugefügt, auf Geräten, die diese Funktion unterstützen, Informationen über die Qualität von laufenden IP Multimedia Subsystem-Aufrufen (IMS) zu erfassen, einschließlich der Qualität zum und aus dem 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 unbemerkt abzulehnen. Informationen zu diesen blockierten Aufrufen werden in der Anrufliste als blockierte Aufrufe protokolliert, um dem Nutzer mehr Transparenz bei fehlenden Aufrufen zu bieten. Wenn Sie diese API verwenden, müssen Sie keine READ_CALL_LOG-Berechtigungen vom Nutzer einholen, um Funktionen für den Anruf-Filter und die Anrufer-ID bereitzustellen.

API für den Anrufweiterleitungsdienst

In Android 10 ändert sich die Verarbeitung von Anruf-Intents. Der NEW_OUTGOING_CALL-Broadcast wurde eingestellt und durch die CallRedirectionService API ersetzt. Die CallRedirectionService API bietet Schnittstellen zum Ändern ausgehender Aufrufe der Android-Plattform. Drittanbieter-Apps können beispielsweise Anrufe abbrechen und sie über VoIP weiterleiten.

Verbesserungen beim Erstellen von Dateien im externen Speicher

Zusätzlich zum bezogenen Speicher bietet Android 10 die folgenden Funktionen für externen Speicher:

Medien und Grafiken

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

Audioeingabe wird geteilt

Unter Android 10 können jetzt zwei Apps gleichzeitig die Audioeingabe teilen. Weitere Informationen finden Sie unter Audioeingabe teilen.

Audiowiedergabe-Aufnahme

Mit Android 10 kann eine App die Audiowiedergabe von anderen Apps aufnehmen. Weitere Informationen finden Sie unter Wiedergabeaufnahme.

Suchleiste in MediaStyle-Benachrichtigungen

Ab Android 10 wird für MediaStyle-Benachrichtigungen eine Suchleiste angezeigt. Die Suchleiste zeigt den Wiedergabefortschritt von PlaybackState.getPosition() an. In einigen Fällen können Sie sie verwenden, um zu einer Stelle im wiedergegebenen Programm zu springen. Darstellung und Verhalten der Steuerleiste werden durch folgende Regeln gesteuert:

  • Die Suchleiste wird angezeigt, wenn eine aktive MediaSession vorhanden ist und ihre Dauer (durch MediaMetadata.METADATA_KEY_DURATION angegeben) größer als null ist. Das bedeutet, dass der Balken bei nicht bestimmten Streams wie Livestreams und Radiosendungen nicht angezeigt wird.
  • Wenn in der Sitzung ACTION_SEEK_TO implementiert ist, kann der Nutzer die Suchleiste ziehen, um den Wiedergabeort zu steuern.

Native MIDI API

Die Android Native MIDI API (AMidi) bietet App-Entwicklern die Möglichkeit, MIDI-Daten mit C/C++code zu senden und zu empfangen. Dadurch ist sie enger in die C/C++ Audio-/Steuerlogik integriert und der Bedarf an JNI wird minimiert.

Weitere Informationen finden Sie unter Android Native MIDI API.

MediaCodecInfo-Verbesserungen

Unter Android 10 werden Methoden zu MediaCodecInfo hinzugefügt, mit denen weitere Informationen zu einem Codec offengelegt werden.

Weitere Informationen finden Sie unter Medien-Codecs.

Thermal API

Wenn Geräte zu warm werden, können sie die CPU und/oder GPU drosseln, was sich auf unerwartete Weise auf Apps und Spiele auswirken kann. Bei Anwendungen, die komplexe Grafiken, intensive Rechenleistung oder eine anhaltende Netzwerkaktivität nutzen, ist die Wahrscheinlichkeit höher, dass Probleme auftreten. Diese können je nach Chipsatz und Kernfrequenz, Integrationsgrad, Geräteverpackung und Formfaktor je nach Gerät variieren.

In Android 10 können Apps und Spiele eine Thermal API verwenden, um Änderungen auf dem Gerät zu beobachten und Maßnahmen zu ergreifen, um einen niedrigeren Stromverbrauch aufrechtzuerhalten, um die normale Temperatur wiederherzustellen. Apps registrieren einen Listener in PowerManager, über den das System den laufenden Überhitzungszustand von leicht und mäßig bis schwer, kritisch, Notfall und Herunterfahren meldet.

Wenn das Gerät eine Überhitzung meldet, können Apps und Spiele helfen, indem sie laufende Aktivitäten zurücknehmen, um den Stromverbrauch auf verschiedene Weise zu reduzieren. Beispielsweise könnten Streaming-Apps die Auflösung/Bitrate oder den Netzwerkverkehr reduzieren, eine Kamera-App könnte Flash oder intensive Bildoptimierung deaktivieren, ein Spiel könnte die Framerate oder Polygon-Tesselation reduzieren, eine Medien-App könnte die Lautstärke von Lautsprechern verringern und eine Karten-App könnte GPS deaktivieren.

Für die Thermal API ist eine neue HAL-Schicht erforderlich – sie wird derzeit auf Pixel-Geräten mit Android 10 unterstützt. Wir arbeiten mit unseren Geräteherstellern zusammen, um die Plattform so schnell wie möglich umfassend unterstützen zu können.

Kamera und Bilder

Mit Android 10 wurden die folgenden neuen kamera- und bildbezogenen Funktionen eingeführt:

Unterstützung für monochrome Kameras

Mit Android 9 (API-Level 28) wurde erstmals die Möglichkeit der monochromen Kamera eingeführt. Mit Android 10 wurde die Unterstützung von monochromen Kameras verbessert:

  • Unterstützung des Y8-Stream-Formats zur Verbesserung der Arbeitsspeichereffizienz.
  • Unterstützung für DNG-Aufnahmen in monochromer RAW-Datei.
  • Einführung von MONO- und NIR CFA-Aufzählungen zur Unterscheidung zwischen normalen monochromen Kameras und Nahinfrarotkameras.

Mit dieser Funktion können Sie ein natives monochromes Bild aufnehmen. Ein logisches Gerät mit mehreren Kameras kann eine monochrome Kamera als physische Unterkamera verwenden, um bei schlechten Lichtverhältnissen eine bessere Bildqualität zu erzielen.

Dynamisches Tiefenformat

Ab Android 10 können Kameras die Tiefendaten für ein Bild mithilfe eines neuen Schemas namens Dynamic Depth Format (DDF) in einer separaten Datei speichern. Anwendungen können sowohl das JPG-Bild als auch seine Tiefenmetadaten anfordern und anhand dieser Informationen bei der Nachbearbeitung eine gewünschte Unkenntlichmachung vornehmen, ohne die ursprünglichen Bilddaten zu ändern.

Die Spezifikation für dieses Format finden Sie unter Dynamisches Tiefenformat.

Bild-Dateiformat mit hoher Effizienz

Das HEIF-Standardformat (High Efficiency Image File) ist ein Standard-Bild- und Videoformat, das eine höhere Codierung und eine geringere Dateigröße im Vergleich zu anderen Dateiformaten ermöglicht.

Weitere Informationen zum Dateiformat finden Sie unter HEIC.

Verbesserungen bei der Verwendung mehrerer Kameras

Android 10 verbessert die Zusammenführung mehrerer Kameras in einer einzigen logischen Kamera. Diese Funktion wurde in Android 9 (API-Level 28) eingeführt. Folgendes wurde der Camera2 API hinzugefügt:

Accessibility Services API

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

AccessibilityNodeInfo-Eintragsschlüssel-Flag

Ab Android 10 kannst du isTextEntryKey() aufrufen, um festzustellen, ob eine bestimmte AccessibilityNodeInfo eine Texteingabetaste darstellt, die Teil einer Tastatur oder eines Ziffernblocks ist.

Dialogfeld für Bedienungshilfen gesprochenes Feedback

Falls Nutzer zum Starten eines Bedienungshilfedienstes die Tastenkombination für Bedienungshilfen verwenden müssen, lässt Android 10 zu, dass das Dialogfeld von einer Sprachausgabe-Aufforderung begleitet wird, wenn der Dienst dies anfordert.

Kurzbefehl für Bedienungshilfen, wenn die Bedienung über Gesten aktiviert ist

Wenn die Bedienung über Gesten in Android 10 aktiviert ist, kann die Schaltfläche „Bedienungshilfen“ weder angezeigt noch ausgewählt werden. Um auf das Menü „Bedienungshilfen“ zuzugreifen, müssen Nutzer eine der folgenden Touch-Gesten ausführen:

  • Wischen Sie mit zwei Fingern nach oben.
  • Wischen Sie mit zwei Fingern nach oben und halten Sie das Display gedrückt.

Kurzbefehl für Bedienungshilfen für physische Tastaturen

In Android 10 können Nutzer den Kurzbefehl für Bedienungshilfen auf einer physischen Tastatur durch Drücken von Strg + Alt + Z auslösen.

Verbesserte Steuerung der Softtastatur

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

Benutzerdefinierte Zeitüberschreitungen für Bedienungshilfen

In Android 10 wird die getRecommendedTimeoutMillis() API eingeführt. Diese Methode unterstützt benutzerdefinierte Zeitüberschreitungen für interaktive und nicht interaktive UI-Elemente. Der Rückgabewert wird sowohl von den Nutzereinstellungen als auch von den Bedienungshilfen-APIs beeinflusst.

Verbesserungen bei Autofill

Android 10 enthält die folgenden Verbesserungen am Autofill-Dienst.

Kompatibilitätsbezogene Autofill-Anfragen

Mit dem Flag FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST kannst du feststellen, ob eine Autofill-Anfrage über den Kompatibilitätsmodus generiert wurde.

Nutzername und Passwort gleichzeitig speichern

Wenn eine Anwendung mehrere Aktivitäten verwendet, um den Nutzernamen, das Passwort und andere Felder anzuzeigen, können Sie das Flag SaveInfo.FLAG_DELAY_SAVE verwenden.

Nutzerinteraktion mit der Benutzeroberfläche zum Speichern

Sie können ein Passwortfeld in einem Speicherdialogfeld ein- und ausblenden, indem Sie einen Aktions-Listener für das Dialogfeld festlegen und die Sichtbarkeit der entsprechenden Passwort-Remote-Ansicht ändern.

Unterstützung für die Aktualisierung von Datasets

Autofill kann vorhandene Passwörter aktualisieren. 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 Muster Builder auszurichten.

Zuordnung eines Werts zu mehreren Arten von Kategorie-IDs zulassen

Wenn Sie UserData.Builder in Android 10 verwenden, können Sie jetzt mehreren Arten von Kategorie-IDs einen Wert zuordnen. In früheren Releases wurde eine Ausnahme ausgegeben, wenn ein Wert mehr als einmal hinzugefügt wurde.

Verbesserte Unterstützung für Kreditkartennummern

Bei der Feldklassifizierung können jetzt vierstellige Zahlen als die letzten vier Ziffern einer Kreditkartennummer erkannt werden.

Unterstützung für die Klassifizierung von app-spezifischen Feldern

Unter Android 10 wird FillResponse.setUserData() hinzugefügt. Damit kannst du app-spezifische Nutzerdaten für die Dauer der Sitzung festlegen. So kann der Autofill-Dienst Typen für Felder mit app-spezifischen Inhalten leichter erkennen.

Benutzeroberfläche und Systemsteuerungen

Unter Android 10 wurden die folgenden Verbesserungen an der Benutzeroberfläche vorgenommen:

Unterstützung von JVMTI-Pop-Frame-Begrenzungen

Android 10 unterstützt die can_pop_frames-Funktion in der Android-JVMTI-Implementierung. Beim Debugging können Sie mit dieser Funktion Funktionen noch einmal ausführen, nachdem sie an einem Haltepunkt angehalten und lokale, globale Werte oder die Implementierung einer Funktion angepasst haben. Weitere Informationen finden Sie auf der Pop-Frame-Referenzseite 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 Einbettung von Oberflächen
  • Geringere Lebensdauerverwaltung

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 Puffern mit dem Compositor. Dies ist eine Alternative für Nutzer, die die Einschränkungen von BufferQueue erreicht haben.

Erkennung von hängenden Renderern in WebView

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

  1. Definieren Sie Ihre eigene abgeleitete Klasse und implementieren Sie die zugehörigen Methoden onRenderProcessResponsive() und onRenderProcessUnresponsive().
  2. Hängen Sie eine Instanz von WebViewRenderProcessClient an ein oder mehrere WebView-Objekte an.
  3. Wenn das WebView nicht mehr reagiert, ruft das System die Methode onRenderProcessUnresponsive() des Clients auf und übergibt WebView und WebViewRenderProcess. (Wenn es sich bei WebView um einen Einzelprozess handelt, ist der Parameter WebViewRenderProcess null.) Ihre App kann entsprechende Aktionen ausführen, z. B. dem Nutzer ein Dialogfeld anzeigen, in dem er gefragt wird, ob er den Renderingprozess anhalten möchte.

Wenn das WebView nicht reagiert, ruft das System onRenderProcessUnresponsive() regelmäßig (nicht öfter als alle fünf Sekunden) auf, unternimmt aber keine weitere Aktion. Wenn das WebView wieder reagiert, ruft das System onRenderProcessResponsive() nur einmal auf.

Einstellungsbereiche

Mit Android 10 werden Einstellungsbereiche eingeführt. Mit dieser API können Apps Nutzern Einstellungen im Kontext ihrer App anzeigen. Dadurch wird verhindert, dass Nutzer die Einstellungen aufrufen müssen, um Elemente wie 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. Chrome öffnet den Bereich mit den Einstellungen für Internetverbindung...

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 in der App nur eine allgemeine Nachricht angezeigt werden, in der der Nutzer aufgefordert wurde, die Einstellungen zu öffnen, um die Verbindung wiederherzustellen. Unter Android 10 kann die Browser-App einen Inline-Bereich mit wichtigen Verbindungseinstellungen wie Flugmodus, WLAN (einschließlich Netzwerke in der Nähe) und mobile Daten anzeigen. In diesem Bereich können Nutzer die Verbindung wiederherstellen, ohne die App zu verlassen.

Damit der Bereich „Einstellungen“ angezeigt wird, lösen Sie mit einer der folgenden Settings.Panel-Aktionen einen Intent 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 sein:

ACTION_INTERNET_CONNECTIVITY
Zeigt Einstellungen zur Internetverbindung an, z. B. Flugmodus, WLAN und mobile Daten.
ACTION_WIFI
Zeigt die WLAN-Einstellungen an, aber nicht die anderen Verbindungseinstellungen. Dies 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 für die Nahfeldkommunikation (NFC) an.
ACTION_VOLUME
Zeigt die Lautstärkeeinstellungen für alle Audiostreams an.

Verbesserungen beim Teilen

Android 10 bietet eine Reihe von Verbesserungen beim Teilen:

Sharing Shortcuts API

Die Sharing Shortcuts API ersetzt die Direct Share APIs.

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

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.

Mit ShortcutInfo.Builder werden Methoden hinzugefügt und optimiert, um zusätzliche Informationen zum Freigabeziel bereitzustellen.

Ziele für den direkten Anteil

Sie können eine dynamische Verknüpfung als Direct Share-Ziel veröffentlichen. Weitere Informationen finden Sie unter Ziele für die direkte Freigabe 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.

Textvorschau

Wenn eine App Textinhalte teilt, kann eine optionale Vorschau des Inhalts in der Sharesheet-Benutzeroberfläche angezeigt werden.

Siehe Rich-Text-Vorschauen hinzufügen.

Weitere Informationen

Weitere Informationen dazu, wie Apps Daten weitergeben 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 gilt, die auf dem Gerät ausgeführt werden. Weitere Informationen findest du unter Dunkles Design.

Typen von Diensten im Vordergrund

In Android 10 wird das XML-Manifestattribut foregroundServiceType eingeführt, das Sie in die Definition verschiedener bestimmter Dienste aufnehmen können. Es ist möglich, aber nur selten sinnvoll, einem bestimmten Dienst mehrere Typen von Diensten im Vordergrund zuzuweisen.

Die folgende Tabelle zeigt die verschiedenen Typen von Diensten im Vordergrund und die Dienste, in denen ein bestimmter Typ deklariert werden sollte:

Typ des Dienstes im Vordergrund Anwendungsbeispiel für einen Dienst, der diesen Typ deklarieren sollte
connectedDevice Einen tragbaren Fitness-Tracker im Blick behalten
dataSync Dateien aus einem Netzwerk herunterladen
location Vom Nutzer initiierte Aktion fortsetzen
mediaPlayback Hörbücher, Podcasts oder Musik abspielen
mediaProjection Aufnehmen eines Videos vom Display des Geräts über einen kurzen Zeitraum
phoneCall Aktuellen Anruf verarbeiten

Kotlin

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

Anmerkungen zur Null-Zulässigkeit für libcore APIs

Mit Android 10 wurde die Abdeckung von Annotationen zur Null-Zulässigkeit im SDK für libcore APIs verbessert. Mit diesen Annotationen erhalten App-Entwickler, die Kotlin- oder Java-Null-Zulässigkeitsanalysen in Android Studio verwenden, bei der Interaktion mit diesen APIs Nullwerte-Informationen.

Verstöße gegen Verträge über die Null-Zulässigkeit in Kotlin führen normalerweise zu Kompilierungsfehlern. Damit die Kompatibilität mit Ihrem vorhandenen Code sichergestellt ist, werden nur die Annotationen @RecentlyNullable und @RecentlyNonNull hinzugefügt. Das bedeutet, dass Verstöße gegen die Null-Zulässigkeit zu Warnungen anstelle von Fehlern führen.

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

Weitere Informationen zu Änderungen von Anmerkungen finden Sie im Blog für Android-Entwickler unter Android Pie SDK ist jetzt Kotlin-freundlicher.

Logo: NDK

Android 10 umfasst die folgenden NDK-Änderungen.

Verbessertes Debugging der Eigentümerschaft von Dateideskriptoren

Unter Android 10 wird fdsan hinzugefügt, mit dem sich Probleme mit der Inhaberschaft von Dateideskriptoren leichter finden und beheben lassen.

Fehler im Zusammenhang mit der unsachgemäßen Handhabung der Eigentümerschaft von Dateideskriptoren, die sich in der Regel in use-after-close und double-close bemerkbar machen, sind analog zu den Fehlern der Arbeitsspeicherzuweisung in use-after-free und Double-free. Sie sind jedoch in der Regel viel schwieriger zu diagnostizieren und zu beheben. Mit fdsan versucht fdsan, die Fehlverwaltung des Dateideskriptors durch Erzwingen der Dateideskriptor-Inhaberschaft zu erkennen und/oder zu verhindern.

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

ELF-TLS

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

Bei 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 beinhaltet die folgende Laufzeitänderung.

Auslösen der Mallinfo-basierten automatischen Speicherbereinigung

Wenn kleine Plattform-Java-Objekte auf riesige Objekte im C++-Heap verweisen, können die C++-Objekte häufig nur zurückgefordert 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 deutlich erhöhten Arbeitsspeichernutzung, da die Plattform die automatische Speicherbereinigung nicht rechtzeitig durchgeführt hatte.

In Android 10 verfolgt die automatische Speicherbereinigung die Gesamtgröße des Heaps, der vom System malloc() zugewiesen wurde. Dadurch wird sichergestellt, dass große malloc()-Zuweisungen immer in GC-auslösende Berechnungen enthalten sind. Bei Anwendungen, die eine große Anzahl von C++-Zuweisungen mit der Java-Ausführung verschachteln, kann dies zu einem Anstieg der Häufigkeit der automatischen Speicherbereinigung führen. Bei anderen Apps kann der Rückgang gering ausfallen.

Tests und Fehlerbehebung

Android 10 umfasst 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 Trace angeben, wenn Sie ein System-Trace auf dem Gerät ausführen. Wenn Sie einen der Werte angeben, führt das System ein langes Trace aus und kopiert während der Aufzeichnung des Trace regelmäßig den Trace-Zwischenspeicher in die Zieldatei. Das Trace ist abgeschlossen, wenn die von Ihnen angegebenen Größen- oder Dauerlimits erreicht sind.

Mit diesen zusätzlichen Parametern können Sie andere Anwendungsfälle testen als mit einem Standard-Trace. Beispielsweise können Sie einen Leistungsfehler diagnostizieren, der erst auftritt, nachdem Ihre Anwendung über einen längeren Zeitraum ausgeführt wurde. In diesem Fall können Sie ein langes Trace über einen ganzen Tag aufzeichnen und dann den CPU-Planer, die Laufwerksaktivität, die Anwendungsthreads und andere Daten im Bericht analysieren, um die Ursache des Fehlers zu bestimmen.

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

Verbesserungen bei TextClassifier

Android 10 bietet zusätzliche Funktionen zur Textklassifizierung in der TextClassifier-Oberfläche.

Spracherkennung

Die Methode detectLanguage() funktioniert ähnlich wie die bisher vorhandenen 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 potenziell vorgeschlagene Aktion und ihren Konfidenzwert.

Intelligente Antworten/Aktionen in Benachrichtigungen

Mit Android 9 wurde die Möglichkeit eingeführt, Antwortvorschläge in einer Benachrichtigung anzuzeigen. Unter Android 10 werden diese Neuerungen um vorgeschlagene absichtsbasierte Aktionen erweitert. Darüber hinaus kann die Plattform diese Vorschläge automatisch generieren. Apps können weiterhin eigene Vorschläge machen oder vom System generierte Vorschläge deaktivieren.

Die API, die zum Generieren dieser Antworten verwendet wird, ist Teil von TextClassifier und wurde auch Entwicklern in Android 10 direkt zur Verfügung gestellt. Weitere Informationen finden Sie im Abschnitt zu Verbesserungen bei TextClassifier.

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