Mit Android 8.0 (API-Level 26) werden neuen Funktionen für Nutzer und Entwickler. In diesem Dokument werden die Neuerungen für Entwickler beschrieben.
Sehen Sie sich auch die <ph type="x-smartling-placeholder"></ph> Verhaltensänderungen unter Android 8.0, um mehr über Bereiche zu erfahren, in denen sich die Plattform ändert kann sich auf deine Apps auswirken.
Nutzererfahrung
Bild-im-Bild-Modus
Bild im Bild unter Android 8.0
Android 8.0 (API-Level 26) ermöglicht den Start von Aktivitäten in Bild-im-Bild-Modus (BiB). BiB ist ein spezielle Art des Mehrfenstermodus hauptsächlich für die Videowiedergabe verwendet. Der BiB-Modus war ursprünglich für Nur mit Android TV; Mit Android 8.0 wird die Funktion auf anderen Android-Geräten.
Eine Aktivität im BiB-Modus ist pausiert, sollte aber
um die entsprechenden Inhalte anzuzeigen. Aus diesem Grund sollten Sie darauf achten,
pausiert die Wiedergabe in onPause()
nicht
-Handler. In diesem Fall solltest du das Video in onStop()
pausieren und die Wiedergabe in onStart()
fortsetzen. Weitere Informationen finden Sie unter
Mehrfenstermodus
Lebenszyklus:
Um anzugeben, dass deine Aktivität den BiB-Modus verwenden kann, lege fest,
android:supportsPictureInPicture
im Manifest auf „true“.
(Ab Android 8.0 ist für BiB kein
Manifest-Attribut android:resizeableActivity
.
Sie müssen jedoch
android:resizeableActivity
auf „true“ setzen, wenn Ihre Aktivität andere unterstützt
Mehrfenstermodus.
Mit Android 8.0 (API-Level 26) wird das neue Objekt PictureInPictureParams
eingeführt.
den Sie an PIP-Methoden übergeben, um festzulegen, wie sich eine Aktivität verhalten soll.
wenn es sich im BiB-Modus befindet. Dieses Objekt gibt Eigenschaften wie die
das bevorzugte Seitenverhältnis der Aktivität.
Die vorhandenen PIP-Methoden, die in Hinzufügen Bild im Bild kann jetzt die auf allen Android-Geräten verwendet werden, nicht nur auf Android TV. Außerdem Android 8.0 bietet die folgenden Methoden zur Unterstützung BiB-Modus:
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: Versetzt die Aktivität in den Bild-im-Bild-Modus. Das Seitenverhältnis der Aktivität und andere Konfigurationseinstellungen werden durch args festgelegt. Falls Felder vorhanden sind in args leer sind, verwendet das System die Werte, die Sie das letzte Mal festgelegt haben, namensActivity.setPictureInPictureParams()
.Die angegebene Aktivität wird in einer Ecke des Bildschirms platziert. der Rest wird der Bildschirm mit der letzten Aktivität gefüllt, die auf dem Bildschirm zu sehen war. Die Aktivität, die in den BiB-Modus wechselt, wird pausiert, bleibt aber erhalten begonnen. Wenn der Nutzer auf die BiB-Aktivität tippt, zeigt das System ein Menü für mit denen Nutzende interagieren können; während der Aktivität keine Berührungsereignisse erreicht werden. im BiB-Status.
-
Activity.setPictureInPictureParams()
: Aktualisiert die PIP-Konfigurationseinstellungen einer Aktivität. Wenn die Aktivität gerade im BiB-Modus sind, werden die Einstellungen aktualisiert. ist dies nützlich, wenn wie sich das Seitenverhältnis der Aktivität ändert. Befindet sich die Aktivität nicht im BiB-Modus, werden diese Konfigurationseinstellungen unabhängig vonenterPictureInPictureMode()
-Methode, die Sie aufrufen.
Benachrichtigungen
In Android 8.0 (API-Level 26) haben wir die Benachrichtigungen so umgestaltet, eine einfachere und einheitlichere Möglichkeit bieten, das Benachrichtigungsverhalten zu verwalten und Einstellungen. Zu diesen Änderungen gehören:
- Benachrichtigungskanäle: Einführung von Android 8.0 Benachrichtigungskanäle, mit denen Sie einen vom Nutzer anpassbaren Kanal erstellen können für jede Art von Benachrichtigung, die angezeigt werden soll. Die Benutzeroberfläche verweist auf für Benachrichtigungskanäle als Benachrichtigungskategorien. Weitere Informationen zur Implementierung von Benachrichtigungskanälen finden Sie unter Verwaltung Benachrichtigungskanäle.
- App-Benachrichtigungspunkte: Android 8.0 unterstützt jetzt die Anzeige von Punkte oder Abzeichen auf App Launcher-Symbolen. Benachrichtigungspunkte stehen für Benachrichtigungen vorhanden sind, die der Nutzer noch nicht geschlossen oder auf die er noch nicht reagiert hat. Informationen zur Verwendung von App-Benachrichtigungspunkten finden Sie unter Benachrichtigung Badges.
- Schlummerfunktion: Nutzer können Benachrichtigungen pausieren, wodurch sie verschwinden. für eine Weile, bevor sie wieder angezeigt werden. Benachrichtigungen erscheinen wieder mit dem wie wichtig sie auch beim ersten Mal sind. Apps können entfernt oder aktualisiert werden eine zurückgestellte Benachrichtigung, die Aktualisierung einer zurückgestellten Benachrichtigung damit sie wieder erscheint.
- Zeitüberschreitungen für Benachrichtigungen: Sie können beim Erstellen einer
Benachrichtigung über
setTimeoutAfter()
Mit dieser Methode können Sie einen Zeitraum festlegen, nach dem eine Benachrichtigung sollte storniert werden. Bei Bedarf können Sie eine Benachrichtigung vor dem das angegebene Zeitlimit überschreitet. - Benachrichtigungseinstellungen: Sie können
setSettingsText()
um den Text festzulegen, der beim Erstellen eines Links zum über das SymbolNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
-Intent. Das System kann folgende Extras anbieten, um Daten zu filtern Die Einstellungen, die deine App Nutzern anzeigen muss:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
undNOTIFICATION_ID
. - Benachrichtigungen schließen: Nutzer können Benachrichtigungen selbst schließen.
Apps können sie programmatisch entfernen. Sie können festlegen, wann eine Benachrichtigung
und warum es durch Implementieren der
onNotificationRemoved()
-Methode des KlasseNotificationListenerService
. - Hintergrundfarben: Sie können für ein Foto eine Hintergrundfarbe festlegen und aktivieren.
Benachrichtigung. Sie sollten diese Funktion nur in Benachrichtigungen für
laufenden Aufgaben, die für Nutzende auf einen Blick wichtig sind. Für
Sie können beispielsweise eine Hintergrundfarbe für Benachrichtigungen festlegen, die sich auf
eine Wegbeschreibung oder einen laufenden Telefonanruf erhalten. Sie können auch die
die gewünschte Hintergrundfarbe
setColor()
Vorgehensweise ermöglicht dirsetColorized()
, eine Hintergrundfarbe für eine Benachrichtigung zu aktivieren. - Messaging-Stil: Unter Android 8.0 werden Benachrichtigungen, die die
Anzeige der Klasse „
MessagingStyle
“ mehr Inhalte in der minimierten Form anzeigen. Sie sollten die MethodeMessagingStyle
Kurs für Messaging-bezogene Benachrichtigungen. Sie können auch dieaddHistoricMessage()
-Methode, um durch Hinzufügen von Kontext zu einer Unterhaltung bisherigen Nachrichten in Benachrichtigungen zu Messaging.
![Eine Benachrichtigung bei langem Drücken auf Menü in Android 8.0 (API-Ebene 26)](https://developer.android.com/static/images/about/versions/oreo/notification-long-press.png?authuser=0000&hl=de)
Nutzer können App Launcher-Symbole lange drücken, um sie zu sehen Benachrichtigungen unter Android 8.0.
AutoFill-Framework
Kontoerstellung, Anmeldung und Kreditkartentransaktionen nehmen Zeit in Anspruch und sind anfällig für Fehler. Nutzer können sich über Apps, die solche Typen erfordern, schnell verärgern. sich wiederholenden Aufgaben.
Unter Android 8.0 (API-Level 26) ist das Ausfüllen von Formularen, z. B. der Anmeldung, möglich und Kreditkartenformularen erleichtern die Einführung des Autofill-Frameworks. Vorhandene und neue Apps unterstützen das Autofill-Framework, nachdem der Nutzer zugestimmt hat. Autofill.
Sie können einige Schritte unternehmen, um die Funktionsweise Ihrer App mit dem Framework zu optimieren. Weitere Informationen finden Sie unter Übersicht über das Autofill-Framework.
Herunterladbare Schriftarten
Mit Android 8.0 (API-Level 26) und der Android Support Library 26 kannst du Schriftarten von einem anstatt Schriftarten im APK zu bündeln oder das APK-Downloadschriftarten Mit dieser Funktion wird die APK-Größe verringert und die Anzahl der und ermöglicht, dass mehrere Apps dieselbe Schriftart verwenden.
Weitere Informationen zum Herunterladen von Schriftarten finden Sie unter Herunterladbare Schriftarten:
Schriftarten in XML
Mit Android 8.0 (API-Level 26) wird eine neue Funktion eingeführt, Schriftarten in XML, die
können Sie Schriftarten
als Ressourcen verwenden. Es ist also nicht nötig,
Schriftarten einzeln zu bündeln,
als Assets. Schriftarten werden in der Datei R
kompiliert und automatisch
im System als Ressource verfügbar sind. Sie können dann über die
des neuen Ressourcentyps font
.
Die Support Library 26 bietet vollständigen Support für diese Funktion auf Geräten mit API-Version 14 und höher.
Weitere Informationen zur Verwendung von Schriftarten als Ressourcen und zum Abrufen von Systemschriftarten finden Sie Siehe Schriftarten in XML.
Größe von TextView automatisch anpassen
Unter Android 8.0 (API-Level 26) können Sie die Größe Ihrer basierend auf der Größe der TextView automatisch zusammen. Das heißt, es ist viel die Textgröße auf verschiedenen Bildschirmen oder mit dynamischen Inhalten zu optimieren. Weitere Informationen zur automatischen Größenanpassung von TextView unter Android 8.0 Siehe TextView automatisch skalieren.
Adaptive Symbole
Mit Android 8.0 (API-Level 26) werden adaptive Launcher-Symbole eingeführt. Adaptive Symbole unterstützen visuelle Elemente. -Effekte und können auf verschiedenen Gerätemodellen eine Vielzahl von Formen darstellen. Wenn Sie mehr darüber erfahren möchten, wie Sie adaptive Symbole erstellen, siehe Adaptive Symbole .
Farbmanagement
Android-Entwickler von Imaging-Apps können jetzt die Vorteile neuer Geräte nutzen. die über ein breites Farbdisplay verfügen. Um die breite Palette anzuzeigen Bilder müssen Apps ein Flag in ihrem Manifest aktivieren (pro Aktivität). und Bitmaps mit einem eingebetteten breiten Farbprofil (AdobeRGB, Pro Photo RGB, DCI-P3 usw.).
WebView-APIs
Android 8.0 bietet mehrere APIs, die Ihnen bei der Verwaltung helfen.
Die WebView
-Objekte, die Webinhalte in Ihrer App anzeigen.
Zu diesen APIs gehören die
Folgendes:
- API-Version
- Google Safe Browsing-API
- Beendigungs-Handle-API
- Renderer-Wichtigkeits-API
Weitere Informationen zur Verwendung dieser APIs finden Sie unter WebViews verwalten
Die Klasse WebView
enthält jetzt eine Safe Browsing API zur Verbesserung der Sicherheit
des Surfens im Web. Weitere Informationen finden Sie unter
Google Safe Browsing API:
Verknüpfungen und Widgets anpinnen
Mit Android 8.0 (API-Level 26) wird die Funktion zum Anpinnen von Verknüpfungen und Widgets. In Ihrer App können Sie angepinnte Verknüpfungen und Widgets für unterstützte Launcher, vorbehaltlich der Nutzerberechtigung.
Weitere Informationen finden Sie in der Verknüpfungen und Widgets anheften Leitfaden zu den Funktionen.
Maximales Bildschirmseitenverhältnis
Unter Android 8.0 (API-Level 26) ändert sich die Konfiguration des maximalen Seitenverhältnisses einer App.
Zunächst führt Android 8.0 die neue maxAspectRatio ein, das Sie mit dem du das maximale Seitenverhältnis für deine App festlegen kannst. Unter Android 8.0 und höher Das maximale Standardseitenverhältnis ist das native Seitenverhältnis auf dem Gerät, auf dem die App ausgeführt wird.
Weitere Informationen zum Deklarieren des maximalen Seitenverhältnisses finden Sie unter Unterstützung verschiedener Bildschirme.
Multi-Display-Unterstützung
Ab Android 8.0 (API-Level 26) bietet die Plattform mehrere Bildschirme unterstützt werden. Ob eine Aktivität den Mehrfenstermodus unterstützt und auf einem Gerät mit mehreren Bildschirmen ausgeführt wird, können Nutzer von einem Bildschirm zum anderen. Wenn eine App eine Aktivität startet, kann angeben, auf welchem Display die Aktivität ausgeführt werden soll.
Hinweis : Wenn bei einer Aktivität im Mehrfenstermodus aktiviert, Multi-Display-Unterstützung für diese Aktivität. Sie sollten Ihre App testen, ob sie in einer Multi-Display-Umgebung gut funktioniert.
Es kann immer nur eine Aktivität fortgesetzt werden, selbst wenn die App hat mehrere Displays. Die Aktivität mit Fokus befindet sich im fortgesetzten Zustand. Alle anderen sichtbaren Aktivitäten werden pausiert, aber nicht beendet. Weitere Informationen wenn mehrere Aktivitäten sichtbar sind. siehe Mehrfenstermodus Lebenszyklus:
Wenn ein Nutzer eine Aktivität von einer Anzeige auf eine andere verschiebt, passt die Größe der Aktivität an und führt bei Bedarf Laufzeitänderungen durch. Meine Aktivitäten die Konfigurationsänderung selbst übernehmen oder dem System den Prozess, der Ihre Aktivität enthält, zerstören und ihn mit dem neuen Dimensionen. Weitere Informationen finden Sie unter Konfiguration verwalten Änderungen.
ActivityOptions
bietet zwei neue Methoden zur Unterstützung
auf mehreren Displays:
setLaunchDisplayId()
- Gibt an, auf welcher Anzeige die Aktivität nach dem Start angezeigt werden soll.
getLaunchDisplayId()
- Gibt die aktuelle Startanzeige der Aktivität zurück.
Die ADB-Shell wurde erweitert, um mehrere Bildschirme zu unterstützen.
Mit dem Befehl shell start
kann jetzt eine Aktivität gestartet werden.
und die Zielanzeige der Aktivität festlegen:
adb shell start <activity_name> --display <display_id>
Einheitliche Layoutränder und einheitlicher Abstand
Unter Android 8.0 (API-Level 26) ist es einfacher, Situationen anzugeben, in denen sich gegenüberliegende Seiten
eines View
-Elements denselben Rand oder Abstand haben.
Konkret können Sie jetzt die folgenden Attribute in Ihrer Layout-XML-Datei verwenden.
Dateien:
- <ph type="x-smartling-placeholder"></ph>
layout_marginVertical
, der definiert, <ph type="x-smartling-placeholder"></ph>layout_marginTop
undlayout_marginBottom
gleichzeitig. - <ph type="x-smartling-placeholder"></ph>
layout_marginHorizontal
, der definiert, <ph type="x-smartling-placeholder"></ph>layout_marginLeft
undlayout_marginRight
gleichzeitig. - <ph type="x-smartling-placeholder"></ph>
paddingVertical
, der definiert, <ph type="x-smartling-placeholder"></ph>paddingTop
undpaddingBottom
gleichzeitig. - <ph type="x-smartling-placeholder"></ph>
paddingHorizontal
, der definiert, <ph type="x-smartling-placeholder"></ph>paddingLeft
undpaddingRight
gleichzeitig.
Hinweis:Wenn Sie die Logik Ihrer App so anpassen,
unterstützen
Sprachen und Kulturen, einschließlich der Textrichtung, bedenken Sie,
haben keinen Einfluss auf die Werte
<ph type="x-smartling-placeholder"></ph>
layout_marginStart
layout_marginEnd
paddingStart
oder
paddingEnd
. Sie können diese Werte zusätzlich zu
die neuen vertikalen und horizontalen Layoutattribute, um
das von der Textrichtung abhängt.
Zeigeraufnahme
Einige Apps wie Spiele, Remote Desktop und Virtualisierungsclients von Vorteil ist, wenn Sie mehr Kontrolle über den Mauszeiger erhalten. Die Zeigeraufnahme ist eine neue in Android 8.0 (API-Ebene 26), die eine solche Steuerung durch die Bereitstellung aller Mausereignisse ermöglicht. zur fokussierten Ansicht in Ihrer App.
Ab Android 8.0 kann ein View
in deiner App
Zeiger erfassen und einen Listener definieren, um erfasste Zeigerereignisse zu verarbeiten. Die
Der Mauszeiger ist in diesem Modus ausgeblendet. Die Ansicht kann die Zeigeraufnahme loslassen
wenn die Mausinformationen nicht mehr benötigt werden. Das System kann auch
Zeigeraufnahme, wenn der Blick verloren geht, z. B. wenn der Nutzer die App öffnet
eine andere App.
Informationen zur Verwendung dieser Funktion in deiner App findest du unter Zeigeraufnahme:
App-Kategorien
Unter Android 8.0 (API-Level 26) kann jede App eine passende Kategorie angeben
in die Sie einfügen, wenn dies relevant ist. Mithilfe dieser Kategorien werden Anwendungen mit ähnlichen
wenn Sie sie den Nutzern präsentieren, wie z. B. Datennutzung, Akkunutzung oder
Speichernutzung. Sie können eine Kategorie für Ihre App festlegen, indem Sie die
Attribut android:appCategory
in Ihrem <application>
Manifest-Tag enthält.
Android TV Launcher
Android 8.0 (API-Level 26) enthält eine neue inhaltsorientierte, Startbildschirm von Android TV, verfügbar mit den Android TV-Emulator und Nexus Player-Geräte-Image für Android 8.0. Auf dem neuen Startbildschirm Videocontent in Zeilen für Kanäle, die jeweils mit Programmen einer App auf System. Apps können mehrere Kanäle veröffentlichen und Nutzer können festlegen, welche Kanäle sie die Sie auf dem Startbildschirm sehen möchten. Der Android TV-Startbildschirm enthält auch die Zeile „Als Nächstes ansehen“, mit Programmen aus Apps gefüllt, basierend auf den Sehgewohnheiten des Nutzers. Apps können auch Videovorschauen, die automatisch abgespielt werden, wenn sich ein Nutzer auf ein Programm konzentriert. Die APIs für Kanäle und Programme sind Teil der TvProvider-APIs, die als Android-Entwickler Modul für die Unterstützung der Bibliothek unter Android 8.0.
Animationsset
Ab Android 8.0 (API-Level 26) unterstützt die AnimatorSet
API jetzt das Suchen und Spielen in
umgekehrt. Mit der Suchfunktion können Sie die Position der Animation auf einen bestimmten
zu einem bestimmten Zeitpunkt. Dies ist nützlich, wenn deine App Animationen enthält
für Aktionen, die rückgängig gemacht werden können. Anstatt zwei separate Animationen
kannst du dasselbe beliebig rückwärts spielen.
Eingabe und Navigation
Tastaturnavigations-Cluster
Wenn eine Aktivität in Ihrer App eine komplexe Ansichtshierarchie verwendet, wie die in Abbildung 2: Sie können Gruppen von UI-Elementen zur Vereinfachung in Clustern organisieren. Tastaturnavigation auswählen. Nutzer können Meta + Tabulatortaste oder Suche + Tabulatortaste drücken Mit Chromebook-Geräten können Sie von einem Cluster zum anderen wechseln. Gute Beispiele für Cluster umfassen: Seitenleisten, Navigationsleisten, Hauptinhaltsbereiche und Elemente die viele untergeordnete Elemente enthalten kann.
<ph type="x-smartling-placeholder">![Eine Beispielaktivität mit fünf Navigationsclustern, die der Nutzer
mit der Tastenkombination für den Tastaturnavigationscluster navigieren können. Cluster
in der folgenden Anordnung angezeigt werden: oberes Steuerfeld, linke Seitenleiste, Hauptinhalt
das untere Steuerfeld und die unverankerte Aktionsschaltfläche.](https://developer.android.com/static/images/about/versions/oreo/keyboard-navigation-clusters.png?authuser=0000&hl=de)
So erstellen Sie ein View
- oder ViewGroup
-Element:
einen Cluster, legen Sie den
<ph type="x-smartling-placeholder"></ph>
android:keyboardNavigationCluster
für
true
in der Layout-XML-Datei des Elements oder übergeben Sie true
in der UI-Logik deiner App in setKeyboardNavigationCluster()
einfügen.
Hinweis:Cluster können nicht verschachtelt werden, obwohl sie nicht verschachtelt sind.
Cluster können auf verschiedenen Hierarchieebenen erscheinen. Wenn Sie versuchen,
Cluster verschachteln, behandelt das Framework nur die
ViewGroup
-Element als Cluster.
Auf Geräten mit Touchscreens können Sie einen Cluster
ViewGroup
-Objekt
android:touchscreenBlocksFocus
-Element auf true
um
Nur Cluster-Navigation in und aus dem Cluster zulassen. Wenn Sie diese
Konfiguration auf einen Cluster übertragen, können Nutzer nicht mit der Tabulatortaste oder den Pfeiltasten
in den Cluster oder aus dem Cluster wechseln; muss er die Cluster-Navigation
Tastenkombination verwenden.
Standardfokus ansehen
In Android 8.0 (API-Level 26) kannst du die View
zuweisen, die
wieder in den Fokus rücken, nachdem eine (neu) erstellte Aktivität fortgesetzt wird und die Nutzenden
Tastaturnavigationstaste, z. B. Tabulatortaste. Um diese Einstellung auf „Standardmäßig fokussiert“ anzuwenden
eines View
-Elements festlegen,
<ph type="x-smartling-placeholder"></ph>
android:focusedByDefault
-Attribut true
in der
Layout-XML-Datei mit dem UI-Element oder übergeben Sie true
an
setFocusedByDefault()
in deinem
die UI-Logik der App.
Sprachausgabe
Aktivitäten und Dienstleistungen können Instanzen von
TextToSpeech
, um Inhalte zu diktieren und auszusprechen. Ab
Unter Android 8.0 (API-Level 26) kann deine App präzisere Zeitinformationen abrufen
wann eine Sprachausgabe-Engine einzelne synthetisierte Wörter spricht,
solange die Suchmaschine
diese Informationen bereitstellt. Mit dieser Funktion können Sie
um die Aufmerksamkeit auf bestimmte Wörter zu lenken, während die Sprachausgabe-Engine spricht
.
Um diese Verbesserungen für die Sprachausgabe-Funktion in Ihrer App zu verwenden, registrieren Sie eine
Instanz von UtteranceProgressListener
. Im Rahmen des
Registrierungsprozess, fügen Sie einen Handler für die
onRangeStart()
.
Die Sprachausgabe-Engine ruft auf,
rangeStart()
zum Aufnehmen
Den Zeitpunkt, zu dem die Audiowiedergabe eines bestimmten Textbereichs erwartet wird
um zu beginnen. Wenn die Audiowiedergabe für diesen Textbereich beginnt, wird der Titel der App
onRangeStart()
ausgeführt wird. Ihre App kann dann auf diesen Callback reagieren, z. B. durch
den Textbereich markiert, der der Äußerung zugeordnet ist.
Weitere Informationen zum Verfolgen des Wiedergabefortschritts einer Sprachausgabe
UtteranceProgressListener
-Klasse ansehen
Referenz.
System
Neue StrictMode-Detektoren
Unter Android 8.0 (API-Ebene 26) werden drei neue StrictMode-Detektoren hinzugefügt, mit denen Sie potenzielle Fehler in deiner App:
detectUnbufferedIo()
erkennt, wenn kann Ihre App Daten ohne Zwischenspeichern lesen oder schreiben, was erhebliche Auswirkungen die Leistung.detectContentUriWithoutPermission()
wird erkennen, wenn Ihre App versehentlich vergisst, einer anderen App Berechtigungen zu gewähren, eine Aktivität außerhalb Ihrer App starten.detectUntaggedSockets()
erkennt, wenn den Netzwerkverkehr Ihrer App ausführt,setThreadStatsTag(int)
, um Ihren Traffic zur Fehlerbehebung mit Tags zu versehen zu verstehen.
Daten im Cache
Android 8.0 (API-Level 26) bietet bessere Anleitungen und Verhaltensweisen im Zusammenhang mit im Cache gespeicherten Daten. Jedes
App erhält nun ein Speicherplatzkontingent für zwischengespeicherte Daten, wie von
getCacheQuotaBytes(UUID)
Wenn das System Speicherplatz freigeben muss, beginnt es damit, im Cache gespeicherte Dateien aus Apps zu löschen die ihr zugewiesenes Kontingent am stärksten übersteigen. Wenn Sie also die Daten im Cache unter Ihrem zugewiesenes Kontingent gehören, gehören Ihre im Cache gespeicherten Dateien zu den letzten Dateien im System, die gelöscht werden müssen, notwendig ist. Wenn das System entscheidet, welche im Cache gespeicherten Dateien in Ihrer App gelöscht werden sollen, Die ältesten Dateien werden zuerst berücksichtigt (basierend auf der Änderungszeit).
Außerdem gibt es zwei neue Verhaltensweisen, die du pro Verzeichnis aktivieren kannst. wie das System im Cache gespeicherte Daten freigibt:
- Mit
StorageManager.setCacheBehaviorAtomic()
kann angegeben werden, dass ein Verzeichnis und sein gesamter Inhalt als eine einzelne atomare Einheit gelöscht werden sollen. - Mit
setCacheBehaviorTombstone(File, boolean)
kann angegeben werden, dass Dateien in einem Verzeichnis nicht gelöscht werden, sondern auf 0 Byte im Die leere Datei bleibt unverändert.
Wenn Sie Speicherplatz für große Dateien zuweisen müssen, erwägen Sie die Verwendung der neuen
allocateBytes(FileDescriptor, long)
API, die automatisch gelöscht wird
im Cache gespeicherte Dateien anderer Apps (falls erforderlich), um Ihrer Anfrage nachzukommen. Wenn Sie entscheiden,
über genügend Speicherplatz für Ihre neuen Daten verfügt, rufen Sie
getAllocatableBytes(UUID)
statt zu verwenden
getUsableSpace()
, da hier alle im Cache gespeicherten Daten berücksichtigt werden.
Daten, die das System für Sie löschen möchte.
Paging des Contentanbieters
Wir haben Content-Provider aktualisiert, um Unterstützung für das Laden einer großen Seite für Seite zu bearbeiten. Eine Foto-App mit Tausenden von Bilder können eine Teilmenge der Daten abfragen, die auf einer Seite angezeigt werden sollen. Jede Seite der von einem Contentanbieter zurückgegebenen Ergebnisse werden durch einen einzelnen Cursor dargestellt. -Objekt enthält. Sowohl ein Client als auch ein Anbieter müssen Paging implementieren, um für diese Funktion.
Detaillierte Informationen zu den Änderungen bei Contentanbietern finden Sie unter
ContentProvider
und
ContentProviderClient
.
Anfragen zur Aktualisierung von Inhalten
Die ContentProvider
und
ContentResolver
Klassen enthalten jetzt jeweils einen
refresh()
-Methode, mit der Kunden leichter erkennen können,
die angeforderten Informationen auf dem neuesten Stand sind.
Sie können benutzerdefinierte Logik zur Aktualisierung von Inhalten hinzufügen, indem Sie
ContentProvider
Achten Sie darauf, die
refresh()
-Methode für die Rückgabe
true
und zeigt den Kunden deines Anbieters an, dass du versucht hast,
um die Daten selbst zu aktualisieren.
Ihre Client-App kann durch Aufrufen einer
eine andere Methode, die auch als
refresh()
Wenn Sie diese Methode aufrufen,
den URI der zu aktualisierenden Daten übergeben.
Hinweis:Da Sie möglicherweise Daten über ein Netzwerk anfordern,
sollten Sie refresh()
aus
Clientseite nur dann angezeigt, wenn es deutliche Hinweise darauf gibt, dass der Inhalt veraltet ist.
Der häufigste Grund für diese Art der Inhaltsaktualisierung ist eine Reaktion auf
zum Aktualisieren wischen
Touch-Geste, mit der explizit die aktuelle Benutzeroberfläche angefordert wird, um den aktuellen Inhalt anzuzeigen.
JobScheduler-Verbesserungen
Android 8.0 (API-Level 26) enthält eine Reihe von Verbesserungen für JobScheduler
. Diese Verbesserungen
erleichtern deine App
um dem neuen Hintergrund
Ausführungslimits, da Sie geplante Jobs in der Regel
die jetzt eingeschränkten Hintergrunddienste
oder implizite Übertragungsempfänger verwenden.
Zu den Aktualisierungen für JobScheduler
gehören:
-
Sie können jetzt einem geplanten Auftrag eine Arbeitswarteschlange zuordnen. So fügen Sie eine Aufgabe hinzu:
in die Warteschlange eines Jobs, rufen Sie
JobScheduler.enqueue()
Wenn der Job ausgeführt wird, können ausstehende Arbeiten aus der Warteschlange entfernt und verarbeitet werden. Diese Funktion eignet sich für viele der Anwendungsfälle, einen Hintergrunddienst starten, insbesondere Dienste,IntentService
-
Android
Die Support Library 26.0.0 führt eine neue
JobIntentService
-Klasse ein, die die gleichen alsIntentService
, verwendet jedoch Jobs anstelle von wenn sie unter Android 8.0 (API-Level 26) oder höher laufen. -
Sie können jetzt anrufen
JobInfo.Builder.setClipData()
um eineClipData
mit einem Job zu verknüpfen. Mit dieser Option wird URI-Berechtigungserteilungen mit einem Job zu verknüpfen, ähnlich wie diese Berechtigungen können anContext.startService()
weitergegeben werden. Sie können URI-Berechtigungserteilungen auch mit Intents verwenden in Arbeitswarteschlangen. -
Geplante Jobs unterstützen jetzt mehrere neue Einschränkungen:
<ph type="x-smartling-placeholder">
- </ph>
JobInfo.isRequireStorageNotLow()
- Der Job wird nicht ausgeführt, wenn auf dem Gerät nur noch wenig Speicherplatz verfügbar ist.
JobInfo.isRequireBatteryNotLow()
- Der Job wird nicht ausgeführt, wenn der Akkustand den kritischen Wert erreicht oder unterschreitet Grenzwert Dies ist der Akkustand, bei dem das Gerät den Niedrigen Akkustand anzeigt. Warnung im Systemdialogfeld.
NETWORK_TYPE_METERED
- Job erfordert eine kostenpflichtige Netzwerkverbindung, wie die meisten mobilen Daten Abos.
Benutzerdefinierter Datenspeicher
Unter Android 8.0 (API-Level 26) können Sie Ihren Einstellungen einen benutzerdefinierten Datenspeicher bereitstellen, der nützlich, wenn Ihre App die Einstellungen in einer Cloud oder lokalen Datenbank speichert oder wenn die Einstellungen gerätespezifisch sind. Weitere Informationen zu Implementierung des Datenspeichers finden Sie Benutzerdefinierter Datenspeicher.
Medienverbesserungen
VolumeShaper
Es gibt eine neue VolumeShaper
-Klasse. Verwenden Sie
kurze automatische Lautstärkeübergänge wie Über- und Überblendungen.
Siehe Amplitude mit VolumeShaper steuern
um mehr zu erfahren.
Verbesserter Audiofokus
Audio-Apps teilen die Audioausgabe mit einem Gerät, indem sie den Audiofokus anfordern und verwerfen.
Eine App verarbeitet Änderungen im Fokus, indem sie die Wiedergabe startet oder beendet oder die Lautstärke verringert.
Es gibt eine neue AudioFocusRequest
-Klasse. Die Verwendung dieser Klasse als Parameter von
requestAudioFocus()
,
Apps haben neue Funktionen für den Umgang mit Änderungen des Audiofokus:
Automatic Ducking und
verzögerter Fokuszuwachs.
Medienmesswerte
Eine neue getMetrics()
-Methode gibt PersistableBundle
zurück.
Objekt, das die Konfiguration enthält
und Leistungsinformationen in Form einer Zuordnung von Attributen und Werten.
Die Methode getMetrics()
ist für diese Medienklassen definiert:
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
Messwerte werden für jede Instanz separat erfasst und bleiben für die Lebensdauer der Instanz. Wenn keine Messwerte verfügbar sind, gibt die Methode null. Die tatsächlich zurückgegebenen Messwerte hängen von der Klasse ab.
MediaPlayer
Ab Android 8.0 (API-Ebene 26) kann MediaPlayer wiedergegeben werden. DRM-geschützt und verschlüsselte Medien mit HLS-Sampleebene.
Android 8.0 bringt eine neue Überlastung
seekTo()
-Befehl, der eine detailgenaue
wenn Sie zu einem Frame springen. Es enthält einen zweiten Parameter, der einen Suchmodus angibt:
SEEK_PREVIOUS_SYNC
verschiebt die Medienposition in einen Synchronisierungs- oder Schlüsselframe die mit einer Datenquelle verknüpft ist, die sich direkt vor oder zum angegebenen Zeitpunkt befindet.SEEK_NEXT_SYNC
verschiebt die Medienposition zu einem Synchronisierungs- oder Schlüsselframe, der dem mit einer Datenquelle, die sich direkt nach oder zum angegebenen Zeitpunkt befindet.SEEK_CLOSEST_SYNC
verschiebt die Medienposition in einen Synchronisierungs- oder Schlüsselframe die mit einer Datenquelle verknüpft ist, die sich zum angegebenen Zeitpunkt am nächsten befindet.SEEK_CLOSEST
verschiebt die Medienposition in einen Frame (nicht unbedingt eine Synchronisierung oder Keyframe), die mit einer Datenquelle verknüpft sind, die sich am nächsten zu einem bestimmten Zeitpunkt.
Bei fortlaufender Suche sollten Apps einen der SEEK_
-Modi anstelle des SEEK_CLOSEST
-Modus verwenden, der relativ langsamer läuft, aber genauer sein kann.
Medienrekorder
- MediaRecorder unterstützt jetzt das MPEG2_TS-Format, das für
Streaming:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
Java
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
- Das
MediaMuxer
kann jetzt beliebig viele Audio- und Videostreams verarbeiten. Keine Beschränkung mehr zu einem Audiotrack und/oder einem Videotrack.addTrack()
verwenden um beliebig viele Titel zu mischen. MediaMuxer
kann auch einen oder mehrere Metadatentracks hinzufügen, die benutzerdefinierte pro Frame enthalten. Informationen. Das Format der Metadaten wird von Ihrer Anwendung festgelegt. Die Metadaten-Track wird nur für MP4-Container unterstützt.
Metadaten können für die Offlineverarbeitung nützlich sein. Zum Beispiel Gyroskopsignale kann der Sensor zur Videostabilisierung verwendet werden.
Beim Hinzufügen eines Metadatentitels muss das MIME-Format des Titels mit dem Präfix beginnen
„application/“ an. Das Schreiben von Metadaten entspricht dem Schreiben von Video-/Audiodaten, mit folgenden Ausnahmen:
dass die Daten nicht aus einem MediaCodec
stammen. Stattdessen gibt die App eine
ByteBuffer
mit einem zugehörigen Zeitstempel für den
writeSampleData()
-Methode.
Der Zeitstempel muss dieselbe Zeitbasis haben wie die Video- und Audiotracks.
In der generierten MP4-Datei wird die im Abschnitt definierte TextMetaDataSampleEntry
verwendet
12.3.3.2 des ISOBMFF zum Signalisieren des MIME-Formats der Metadaten. Wenn Sie MediaExtractor
zum Extrahieren der Datei mit dem Metadatentrack verwenden, wird der MIME-Typ
Format der Metadaten wird in MediaFormat
extrahiert.
Verbesserter Zugriff auf Mediendateien
Die
<ph type="x-smartling-placeholder"></ph>
Storage Access Framework (SAF) ermöglicht Apps die Bereitstellung eines benutzerdefinierten
DocumentsProvider
, die Zugriff auf Dateien gewähren kann
in einer Datenquelle mit anderen Apps zu verknüpfen. Tatsächlich
kann der Dokumentenanbieter sogar
die sich im Netzwerk befinden oder ein Protokoll wie
Media Transfer Protocol (MTP):
Der Zugriff auf große Mediendateien aus einer Remote-Datenquelle Herausforderungen:
- Mediaplayer benötigen einen suchbaren Zugriff auf eine Datei von einem Dokumentanbieter. In Fällen, in denen sich eine große Mediendatei in einer Remote-Datenquelle befindet, Der Dokumentenanbieter muss alle Daten im Voraus abrufen und einen Snapshot erstellen Datei-Deskriptor. Der Mediaplayer kann die Datei nicht ohne sie wiedergeben. Beschreibung, sodass die Wiedergabe erst beginnen kann, wenn der Dokumentanbieter den Vorgang abgeschlossen hat. die Datei herunterladen.
- Manager von Mediensammlungen wie z. B. Foto-Apps müssen eine Reihe von Zugriffs-URIs, um Medien zu erreichen, die auf einer externen SD-Karte über einen Ordner. Dieses Zugriffsmuster ermöglicht Massenoperationen auf Medien wie Verschieben, Kopieren und Löschen – ziemlich langsam.
- Manager von Mediensammlungen können den Speicherort eines Dokuments nicht bestimmen, URI. Dadurch ist es für diese Arten von Apps schwierig, Nutzern wo eine Mediendatei gespeichert wird.
Android 8.0 löst diese Herausforderungen durch einen verbesserten Speicherzugriff Framework.
Anbieter benutzerdefinierter Dokumente
Ab Android 8.0 ermöglicht das Storage Access Framework benutzerdefinierte Dokumente zum Erstellen suchbarer Dateideskriptoren für Dateien in einem Remote-Datenquelle. Die SAF kann eine Datei öffnen, um eine nativ suchbare Datei abzurufen Beschreibung. Die SAF liefert dann diskrete Byteanfragen an die Dokumente. Dienstanbieter. Mit dieser Funktion kann ein Dokumentanbieter den genauen Bereich der von einer Mediaplayer-App angeforderten Byte an, anstatt den gesamten im Voraus zu erstellen.
Um diese Funktion zu nutzen, müssen Sie die neue
StorageManager.openProxyFileDescriptor()
-Methode. Die
Die Methode openProxyFileDescriptor()
akzeptiert ein ProxyFileDescriptorCallback
-Objekt als Callback. Die SAF ruft
den Callback jedes Mal, wenn eine Client-Anwendung Dateivorgänge auf der
Der vom Dokumentanbieter zurückgegebene Dateideskriptor.
Direkter Zugriff auf Dokumente
Ab Android 8.0 (API-Level 26) kannst du die
getDocumentUri()
-Methode für
URI abrufen, der auf dasselbe Dokument wie die angegebene mediaUri
verweist.
Da der zurückgegebene URI jedoch von einem
DocumentsProvider
, Manager von Mediensammlungen haben Zugriff
direkt in das Dokument, ohne dass Sie Baumstrukturen von bereichsbezogenen Verzeichnissen durchsuchen müssen.
Dadurch können die Medienmanager Dateivorgänge für das Dokument durchführen.
erheblich schneller.
Achtung:Mit der Methode getDocumentUri()
können nur Mediendateien gesucht werden. werden Apps nicht mit der
auf diese Dateien zugreifen dürfen. Weitere Informationen dazu, wie Sie Zugriff erhalten
Berechtigung für Mediendateien finden Sie in der Referenzdokumentation.
Pfade zu Dokumenten
Wenn Sie das Storage Access Framework in Android 8.0 (API-Level 26) verwenden, können Sie die
Methode findDocumentPath()
, in beiden verfügbar
DocumentsContract
und
DocumentsProvider
Klassen, um den Pfad vom Stammverzeichnis eines Dateisystems anhand der
ID. Die Methode gibt diesen Pfad in einem
DocumentsContract.Path
-Objekt. Wenn eine Datei
mehrere definierte Pfade zum selben Dokument hat, gibt die Methode den Fehlerwert
Pfad, der am häufigsten verwendet wird, um das Dokument mit der angegebenen ID zu erreichen.
Diese Funktion ist in den folgenden Szenarien besonders nützlich:
- Ihre App verwendet ein Speichern unter in dem der Standort eines für ein bestimmtes Dokument.
- Deine App zeigt Ordner in einer Suchergebnisansicht an und das untergeordnete Element muss geladen werden die sich in einem bestimmten Ordner befinden, wenn der Nutzer Ordner.
Hinweis:Wenn Ihre App nur auf einige der Dokumente zugreifen darf,
im Pfad enthält der Rückgabewert von findDocumentPath()
nur
Ordner und Dokumente, auf die Ihre App zugreifen kann.
Überwachen der Audiowiedergabe
Der AudioManager
-Systemdienst verwaltet eine Liste mit
aktive AudioPlaybackConfiguration
-Objekte, von denen jedes
enthält Informationen zu einer bestimmten Audiowiedergabesitzung. Ihre App kann
rufen Sie den Satz derzeit aktiver Konfigurationen ab, indem Sie
getActivePlaybackConfigurations()
Ab Android 8.0 (API-Level 26) kannst du einen Callback registrieren, der
Ihrer App, wenn eines oder mehrere
AudioPlaybackConfiguration
Objekte wurden geändert. Gehen Sie dazu wie folgt vor:
registerAudioPlaybackCallback()
aufrufen und eine Instanz von
AudioManager.AudioPlaybackCallback
. Die
Die Klasse AudioManager.AudioPlaybackCallback
enthält die
onPlaybackConfigChanged()
-Methode, die das System aufruft, wenn die
Änderungen der Wiedergabekonfiguration.
Konnektivität
WLAN-fähig
Android 8.0 (API-Level 26) unterstützt Wi-Fi Aware, das auf dem Nachbarn basiert NAN-Spezifikation (Awareness Networking). Auf Geräten mit der entsprechenden Wi-Fi Aware-Hardware, Apps und Geräte in der Nähe können die Geräte erkennen und kommunizieren über WLAN ohne Internetzugang. Wir arbeiten mit unserer Hardware -Partner so bald wie möglich auf ihre Geräte mit Wi-Fi Aware-Technologie umstellen. Für Informationen zum Einbinden von Wi-Fi Aware in Ihre App finden Sie unter Wi-Fi Aware.
Bluetooth
Android 8.0 (API-Level 26) erweitert die Bluetooth-Unterstützung der Plattform durch Folgendes: Funktionen:
- Unterstützung für den Standard AVRCP 1.4, der das Durchsuchen von Mediatheken ermöglicht
- Unterstützung des BLE-5.0-Standards (Bluetooth Low Energy)
- Integration des Sony LDAC-Codecs in den Bluetooth-Stack.
Begleitgerät koppeln
Android 8.0 (API-Ebene 26) bietet APIs, mit denen Sie die Dialogfeld für Kopplungsanfrage beim Koppeln mit Begleitgeräten über Bluetooth, BLE und WLAN Weitere Informationen finden Sie unter Begleitgerät Kopplung.
Weitere Informationen zur Verwendung von Bluetooth unter Android finden Sie in der Informationen zu Bluetooth Für Änderungen an Bluetooth für Android 8.0 (API-Level 26) finden Sie in den Bluetooth der Seite zu Verhaltensänderungen unter Android 8.0
Inhalte teilen
Intelligentes Teilen
Android 8.0 (API-Level 26) lernt personalisiertes Teilen Präferenzen und ein besseres Verständnis für die einzelnen Inhaltstypen, Apps zum Teilen. Macht ein Nutzer ein Foto von einem Beleg, 8.0 eine App zur Spesenabrechnung vorschlagen kann; nimmt der Nutzer ein Selfie auf, App das Bild besser verarbeiten kann. Android 8.0 lernt all das Mustern, die sich an den personalisierten Präferenzen.
Das intelligente Teilen funktioniert bei anderen Inhaltstypen als image
, z. B.
audio
, video
, text
, URL
usw.
Wenn du die Funktion „Intelligentes Teilen“ aktivieren möchtest, füge bis zu drei ArrayList
hinzu
Stringanmerkungen zum Intent, der den Inhalt teilt. Die Anmerkungen sollten
die Hauptkomponenten oder -themen in den Inhalten beschreiben. Das folgende Codebeispiel
zeigt, wie Sie dem Intent Anmerkungen hinzufügen:
Kotlin
val annotations: ArrayList<String> = arrayListOf( "topic1", "topic2", "topic3" ) intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations )
Java
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
Weitere Informationen zu intelligenten Anmerkungen zum Teilen findest du unter
EXTRA_CONTENT_ANNOTATIONS
Textklassifikator
Auf kompatiblen Geräten können Apps mit einem neuen Textklassifikator prüfen, ob ein
String entspricht einem bekannten Klassifikator-Entitätstyp und es wird eine Auswahl vorgeschlagen
Alternativen. Zu den vom System erkannten Entitäten gehören Adressen, URLs,
Telefonnummern und E-Mail-Adressen. Weitere Informationen finden Sie unter
TextClassifier
Bedienungshilfen
Android 8.0 (API-Level 26) unterstützt mehrere neue Bedienungshilfen für Entwickler, die ihre eigenen Bedienungshilfen erstellen:
- Neue Volumenkategorie für die Anpassung Barrierefreiheit Lautstärke
- Fingerabdruck Touch-Gesten als Eingabemechanismus verwenden.
- Mehrsprachig Sprachausgabe.
- Eine hardwarebasierte Barrierefreiheit Schnellzugriff auf eine bevorzugte Bedienungshilfe.
- Unterstützung für Fortsetzung Touch-Gesten oder programmatische Abfolge von Strichen.
- Eine Barrierefreiheit Schaltfläche zum Aufrufen einer von mehreren aktivierten Bedienungshilfen (nur auf Geräten mit einem durch Software gerenderten Navigationsbereich verfügbar).
- Standardisiert einseitige Bereichswerte.
- Mehrere Funktionen für wird verarbeitet Text, einschließlich Hinweistext und Positionen von Bildschirmtexten, Zeichen.
Sicherheit und Datenschutz
Berechtigungen
Mit Android 8.0 (API-Level 26) werden mehrere neue Berechtigungen im Zusammenhang mit Telefonie eingeführt:
- Die <ph type="x-smartling-placeholder"></ph>
Mit der Berechtigung
ANSWER_PHONE_CALLS
kann deine App den Anruf annehmen eingehende Telefonanrufe programmatisch verwalten. Zur Bearbeitung eines eingehenden Anrufs in können Sie die MethodeacceptRingingCall()
. - Die <ph type="x-smartling-placeholder"></ph>
Die Berechtigung
READ_PHONE_NUMBERS
gewährt deiner App Lesezugriff auf die auf einem Gerät gespeicherten Telefonnummern.
Diese Berechtigungen sind klassifiziert als
gefährlich
und sind beide Teil des
PHONE
Berechtigungsgruppe.
Neue APIs für den Kontozugriff und Discovery-APIs
Android 8.0 (API-Level 26) enthält einige Verbesserungen Apps Zugriff auf Nutzerkonten erhalten. Für die von ihm verwalteten Konten Authenticatoren können anhand ihrer eigenen Richtlinien entscheiden, oder Konten für eine App offenlegen. Das Android-System erfasst Anwendungen, die auf ein bestimmtes Konto zugreifen.
In früheren Android-Versionen waren Apps, die die Liste der
Nutzerkonten mussten Updates für alle Konten erhalten, einschließlich Konten mit
nicht miteinander verwandt sind. Android 8.0 bietet
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
Methode, mit der Apps eine Liste von Kontotypen angeben können
für die Kontoänderungen empfangen werden sollen.
API-Änderungen
AccountManager bietet sechs neue Methoden, mit denen die Apps können auf ein Konto zugreifen:
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: Legt die Sichtbarkeit für ein bestimmtes Nutzerkonto und Paket fest Kombination.-
getAccountVisibility(android.accounts.Account, java.lang.String)
: Ruft die Sichtbarkeit für ein bestimmtes Nutzerkonto und Paket ab Kombination. -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: Ermöglicht es Authentifizierungsexperten, die Konten und Sichtbarkeitsstufen für eine bereitgestellten Pakets. -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: Ermöglicht es Authenticatoren, gespeicherte Sichtbarkeitswerte für ein bestimmtes Konto abzurufen. -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: Ermöglicht Authenticatoren, die Sichtbarkeitswerte eines Kontos zu initialisieren. -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
: Fügt dem Element einenOnAccountsUpdateListener
-Listener hinzu.AccountManager
-Objekt. Das System ruft diesen Listener auf wenn sich die Liste der Konten auf dem Gerät ändert.
Mit Android 8.0 (API-Level 26) werden zwei spezielle Paketnamenwerte eingeführt, um die Sichtbarkeit anzugeben
für Anwendungen festzulegen, die nicht mit der
setAccountVisibility(android.accounts.Account, java.lang.String, int)
. Die
PACKAGE_NAME_KEY_LEGACY_VISIBLE
wird der Sichtbarkeitswert auf Apps angewendet,
GET_ACCOUNTS
und Zielversionen
Android 8.0 oder älter als Android 8.0
Signaturen mit dem Authenticator für jede Android-Version übereinstimmen.
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
einen Standard-Sichtbarkeitswert für
Apps, die noch nicht festgelegt wurden und für die
PACKAGE_NAME_KEY_LEGACY_VISIBLE
ist nicht
zutreffend sind.
Weitere Informationen zu den neuen APIs für Kontozugriff und Erkennung finden Sie in der
Referenz für
AccountManager
und
OnAccountsUpdateListener
.
Testen
Instrumentierungstests
Android 8.0 (API-Level 26) bietet folgende zusätzliche Unterstützung für den Instrumentierungstests.
Für nicht standardmäßige App-Prozesse ausführen
Sie können jetzt festlegen, dass ein bestimmter Instrumentierungstest für einen Prozess außerhalb des Standardprozesses Ihrer App. Diese Konfiguration ist nützlich, wenn Ihre App mehrere Aktivitäten enthält, die in verschiedenen Prozessen ausgeführt werden.
Rufe dein Manifest auf, um eine nicht standardmäßige Prozessinstrumentierung zu definieren
und dann zum gewünschten
<ph type="x-smartling-placeholder"></ph>
<instrumentation>
-Element. Fügen Sie den
android:targetProcess
-Attribut und legen Sie seinen Wert auf einen der folgenden Werte fest:
Folgendes:
- Der Name eines bestimmten Prozesses.
- Eine durch Kommas getrennte Liste von Prozessnamen.
- Einen Platzhalter (
"*"
), mit dem die Instrumentierung ausgeführt werden kann jeden gestarteten Prozess, der Code in dem Paket ausführt, Das Attributandroid:targetPackage
Während der Instrumentierungstest ausgeführt wird, können Sie prüfen, welcher Prozess
durch Aufrufen von getProcessName()
.
Ergebnisse während eines Tests melden
Sie können jetzt
Ergebnisse melden, während der Instrumentierungstest ausgeführt wird.
statt danach, indem Sie addResults()
aufrufen.
Intents für Tests simulieren
Um es einfacher zu machen, isolierte, unabhängige UI-Tests für die
werden mit Android 8.0 (API-Level 26)
onStartActivity()
-Methode. Sie überschreiben diese Methode in einer benutzerdefinierten Unterklasse der
Instrumentation.ActivityMonitor
zur Verarbeitung einer bestimmten
Intent erstellt, den die Testklasse aufruft.
Wenn die Testklasse den Intent aufruft, gibt die Methode einen Stub zurück.
Instrumentation.ActivityResult
-Objekt, anstatt es auszuführen
den Intent selbst. Wenn Sie diese simulierte Intent-Logik in Ihren Tests verwenden,
wie sich Ihre Aktivität auf den Intent vorbereitet, den Sie an einen
Aktivitäten oder eine ganz andere App.
Laufzeit und Werkzeuge
Plattformoptimierungen
Android 8.0 (API-Level 26) bringt Laufzeit- und andere Optimierungen auf der Plattform, zu einer Reihe von Leistungsverbesserungen führen. Zu diesen Optimierungen gehören die automatische Verdichtung der automatischen Speicherbereinigung, Speicher effizienter nutzen und den Code gespeichert haben.
Diese Optimierungen führen zu kürzeren Startzeiten und einer besseren Leistung sowohl in der Betriebssystem und Apps
Aktualisierte Java-Sprachunterstützung
Android 8.0 (API-Ebene 26) unterstützt mehrere zusätzliche OpenJDK Java APIs:
java.time
von OpenJDK 8.java.nio.file
undjava.lang.invoke
von OpenJDK 7.
Weitere Informationen zu den Klassen und Methoden in diesen neu hinzugefügten finden Sie in der API-Referenzdokumentation.
Wenn Sie Java 8-Sprachfunktionen in Android Studio verwenden, sollten Sie neueste Vorschauversion herunterladen.
Aktualisierte ICU4J Android Framework APIs
Android 8.0 (API-Level 26) erweitert die
ICU4J-Android-Framework
APIs, eine Teilmenge der ICU4J APIs, mit denen App-Entwickler
android.icu
-Paket verwenden. Diese APIs verwenden Lokalisierungsdaten
auf dem Gerät vorhanden ist. Sie können Ihre APK-Datei also reduzieren, indem Sie das
ICU4J-Bibliotheken in Ihre APK-Datei.
Tabelle 1 Verwendete ICU-, CLDR- und Unicode-Versionen in Android.
Android-API-Level | ICU-Version | CLDR-Version | Unicode-Version |
---|---|---|---|
Android 7.0 (API-Level 24), Android 7.1 (API-Level 25) | 56 | 28 | 8.0 |
Android 8.0 (API-Level 26) | 58,2 | 30.0.3 | 9.0 |
Weitere Informationen zur Internationalisierung unter Android, darunter ICU4J-Unterstützung, siehe Internationalisierung auf Android-Geräten
Android Enterprise
Es wurden neue Unternehmensfunktionen und APIs für Geräte eingeführt, auf denen Android 8.0 (API-Level 26) Zu den Highlights gehören:
- Mit Arbeitsprofilen auf vollständig verwalteten Geräten können Unternehmen personenbezogenen Daten und die Verwaltung von beidem.
- Über die API-Delegierung können Geräte- und Profilinhaber Apps zuweisen auf andere Anwendungen übertragen.
- Die Nutzerfreundlichkeit des Bereitstellungsablaufs wurde verbessert (z. B. neue Anpassungsoptionen) die Einrichtungszeit reduzieren.
- Dank neuer Einstellungen für Bluetooth, WLAN, Sicherung und Sicherheit können Unternehmen mehr Geräte verwalten können. Mit dem Logging von Netzwerkaktivitäten können Unternehmen Störungen.
Wenn Sie mehr über diese und andere neue Android Enterprise-APIs und -Funktionen erfahren möchten, Siehe Android im Unternehmen.