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 den Artikel Veränderungen am Verhalten von Android 8.0 an, um zu erfahren, in welchen Bereichen sich Plattformänderungen auf Ihre Apps auswirken können.
Nutzererfahrung
Bild-im-Bild-Modus
Bild im Bild unter Android 8.0
Unter Android 8.0 (API-Level 26) können Aktivitäten im Bild-im-Bild-Modus (PIP) gestartet werden. Der PIP-Modus ist eine spezielle Art des Multifenstermodus, die hauptsächlich für die Videowiedergabe verwendet wird. Der PIP-Modus war ursprünglich nur für Android TV verfügbar. Mit Android 8.0 ist die Funktion auch auf anderen Android-Geräten verfügbar.
Eine Aktivität im BiB-Modus ist pausiert, sollte aber
um die entsprechenden Inhalte anzuzeigen. Achten Sie daher darauf, dass Ihre App die Wiedergabe in ihrem onPause()
-Handler nicht pausiert. In diesem Fall solltest du das Video in onStop()
pausieren und die Wiedergabe in onStart()
fortsetzen. Weitere Informationen finden Sie unter Multi-Window-Lebenszyklus.
Wenn du angeben möchtest, dass für deine Aktivität der PIP-Modus verwendet werden kann, setze android:supportsPictureInPicture
im Manifest auf „wahr“.
Ab Android 8.0 ist für PIP das Manifestattribut android:resizeableActivity
nicht erforderlich.
Sie müssen android:resizeableActivity
jedoch auf „wahr“ setzen, wenn Ihre Aktivität andere Multifenstermodi unterstützt.
Mit Android 8.0 (API-Level 26) wird das neue Objekt PictureInPictureParams
eingeführt. Sie übergeben es an PIP-Methoden, um anzugeben, wie sich eine Aktivität im PIP-Modus verhalten soll. Dieses Objekt gibt Eigenschaften wie die
das bevorzugte Seitenverhältnis der Aktivität.
Die vorhandenen BiB-Methoden, die unter Bild-im-Bild-Modus hinzufügen beschrieben werden, können jetzt nicht nur auf Android TV-Geräten, sondern auf allen Android-Geräten verwendet werden. Außerdem bietet Android 8.0 die folgenden Methoden zur Unterstützung des PIP-Modus:
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: Versetzt die Aktivität im Bild-im-Bild-Modus. Das Seitenverhältnis und andere Konfigurationseinstellungen der Aktivität werden von args angegeben. 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 PIP-Modus wechselt, wird pausiert, bleibt aber aktiv. Wenn der Nutzer auf die PIP-Aktivität tippt, zeigt das System ein Menü an, mit dem er interagieren kann. Während die Aktivität im PIP-Status ist, werden keine Touch-Ereignisse an sie gesendet.
-
Activity.setPictureInPictureParams()
: Aktualisiert die PIP-Konfigurationseinstellungen einer Aktivität. Wenn sich die Aktivität gerade im PIP-Modus befindet, werden die Einstellungen aktualisiert. Das ist nützlich, wenn 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. Informationen zum Implementieren von Benachrichtigungskanälen finden Sie unter Benachrichtigungskanäle verwalten.
- App-Benachrichtigungspunkte: Android 8.0 unterstützt jetzt die Anzeige von Punkte oder Abzeichen auf App Launcher-Symbolen. Die 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.
- Zurückstellen: Nutzer können Benachrichtigungen zurückstellen, sodass sie für einen bestimmten Zeitraum verschwinden und dann wieder angezeigt werden. Benachrichtigungen werden mit derselben Wichtigkeit angezeigt, mit der sie zum ersten Mal angezeigt wurden. Apps können eine aufgeschobene Benachrichtigung entfernen oder aktualisieren. Durch das Aktualisieren einer aufgeschobenen Benachrichtigung wird sie jedoch nicht wieder angezeigt.
- Zeitlimit für Benachrichtigungen: Sie können beim Erstellen einer Benachrichtigung mit
setTimeoutAfter()
ein Zeitlimit festlegen. Mit dieser Methode können Sie einen Zeitraum festlegen, nach dem eine Benachrichtigung sollte storniert werden. Bei Bedarf können Sie eine Benachrichtigung vor Ablauf der angegebenen Zeitüberschreitung abbrechen. - Benachrichtigungseinstellungen: Sie können
setSettingsText()
aufrufen, um den Text festzulegen, der angezeigt wird, wenn Sie über die IntentNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
einen Link zu den Benachrichtigungseinstellungen Ihrer App erstellen. Das System kann die folgenden Extras bereitstellen, um die Einstellungen zu filtern, die Ihre App Nutzern anzeigen muss:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
undNOTIFICATION_ID
. - Schließen von Benachrichtigungen: Nutzer können Benachrichtigungen selbst schließen und Apps können sie programmatisch entfernen. Sie können festlegen, wann und warum eine Benachrichtigung geschlossen wird, indem Sie die Methode
onNotificationRemoved()
aus der KlasseNotificationListenerService
implementieren. - 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. So können Sie beispielsweise eine Hintergrundfarbe für Benachrichtigungen zu Wegbeschreibungen oder laufenden Anrufen festlegen. Sie können die gewünschte Hintergrundfarbe auch mit
setColor()
festlegen. So können Sie mitsetColorized()
eine Hintergrundfarbe für eine Benachrichtigung aktivieren. - Nachrichtenstil: Unter Android 8.0 werden in minimierter Form mehr Inhalte in Benachrichtigungen angezeigt, die die Klasse
MessagingStyle
verwenden. 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.

Unter Android 8.0 können Nutzer lange auf App Launcher-Symbole drücken, um sich Benachrichtigungen anzusehen.
AutoFill-Framework
Kontoerstellung, Anmeldung und Kreditkartentransaktionen nehmen Zeit in Anspruch und sind anfällig für Fehler. Nutzer können schnell frustriert werden, wenn sie Apps verwenden, die diese Art von sich wiederholenden Aufgaben erfordern.
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 Autofill-Framework – Übersicht.
Herunterladbare Schriftarten
Mit Android 8.0 (API-Level 26) und der Android Support Library 26 kannst du Schriftarten von einer anstatt Schriftarten im APK zu bündeln oder das APK-Downloadschriftarten Diese Funktion reduziert die APK-Größe, erhöht die Erfolgsquote bei der App-Installation und ermöglicht es, dass mehrere Apps denselben Schriftschnitt 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. Das bedeutet, dass Sie Schriftarten nicht als Assets bündeln müssen. Schriftarten werden in einer R
-Datei kompiliert und sind automatisch als Ressource im System verfügbar. 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-Ebene 26) können Sie festlegen, dass sich die Textgröße automatisch an die Größe des TextViews anpasst. So lässt sich die Textgröße auf verschiedenen Bildschirmen oder bei dynamischen Inhalten viel einfacher optimieren. Weitere Informationen zur automatischen Größeanpassung von TextView in Android 8.0 finden Sie unter Autosizing TextView.
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. Informationen zum Erstellen adaptiver Symbole finden Sie im Leitfaden Adaptive Symbole.
Farbmanagement
Android-Entwickler von Imaging-Apps können jetzt die Vorteile neuer Geräte nutzen. die über ein breites Farbdisplay verfügen. Damit Bilder mit erweitertem Farbraum angezeigt werden können, müssen Apps in ihrem Manifest (pro Aktivität) ein Flag aktivieren und Bitmaps mit einem eingebetteten Wide-Gamut-Farbprofil (z. B. AdobeRGB, Pro Photo RGB oder DCI-P3) laden.
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
- Termination 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, um die Sicherheit beim Surfen im Web zu erhöhen. Weitere Informationen finden Sie unter
Google Safe Browsing API:
Verknüpfungen und Widgets anpinnen
Mit Android 8.0 (API-Ebene 26) können Verknüpfungen und Widgets in Apps angepinnt werden. 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) wurde die Konfiguration des maximalen Seitenverhältnisses einer App geändert.
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. Außerdem ist unter Android 8.0 und höher das Standard-Maximalseitenverhältnis einer App das native Seitenverhältnis des Geräts, auf dem die App ausgeführt wird.
Weitere Informationen zum Deklarieren des maximalen Seitenverhältnisses finden Sie unter Unterstützung verschiedener Bildschirme.
Unterstützung für mehrere Displays
Ab Android 8.0 (API-Ebene 26) bietet die Plattform erweiterten Support für mehrere Displays. Wenn eine Aktivität den Multifenstermodus unterstützt und auf einem Gerät mit mehreren Bildschirmen ausgeführt wird, können Nutzer die Aktivität von einem Bildschirm auf einen anderen verschieben. Wenn eine App eine Aktivität startet, kann sie angeben, auf welchem Display die Aktivität ausgeführt werden soll.
Hinweis: Wenn eine Aktivität den Mehrfenstermodus unterstützt, wird in Android 8.0 automatisch die Unterstützung für mehrere Displays für diese Aktivität aktiviert. Sie sollten Ihre App testen, ob es 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 Status. Alle anderen sichtbaren Aktivitäten sind 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. Ihre Aktivität kann die Konfigurationsänderung selbst verarbeiten oder es kann dem System erlaubt werden, den Prozess mit Ihrer Aktivität zu löschen und mit den neuen Dimensionen neu zu erstellen. Weitere Informationen finden Sie unter Konfigurationsänderungen verarbeiten.
ActivityOptions
bietet zwei neue Methoden zur Unterstützung
auf mehreren Displays:
setLaunchDisplayId()
- Gibt an, auf welchem Display die Aktivität angezeigt werden soll, wenn sie gestartet wird.
getLaunchDisplayId()
- Gibt das aktuelle Startdisplay der Aktivität zurück.
Die adb-Shell wurde um die Unterstützung mehrerer Displays erweitert.
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:
-
layout_marginVertical
, der definiert,layout_marginTop
undlayout_marginBottom
gleichzeitig. -
layout_marginHorizontal
, der definiert,layout_marginLeft
undlayout_marginRight
gleichzeitig. -
paddingVertical
, wodurch gleichzeitigpaddingTop
undpaddingBottom
definiert werden. -
paddingHorizontal
, der definiert,paddingLeft
undpaddingRight
gleichzeitig.
Hinweis: Wenn Sie die Logik Ihrer App anpassen, um unterschiedliche Sprachen und Kulturen zu unterstützen, einschließlich der Textrichtung, denken Sie daran, dass diese Attribute keinen Einfluss auf die Werte von layout_marginStart
, layout_marginEnd
, paddingStart
oder paddingEnd
haben. Sie können diese Werte zusätzlich zu den neuen vertikalen und horizontalen Layoutattributen selbst festlegen, um ein Layoutverhalten zu erstellen, das von der Textrichtung abhängt.
Zeigererfassung
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. Der Mauszeiger ist in diesem Modus ausgeblendet. Die Ansicht kann die Zeigeraufnahme loslassen
wenn die Mausinformationen nicht mehr benötigt werden. Das System kann die Erfassung des Mauszeigers auch aufheben, wenn der Fokus der Ansicht verloren geht, z. B. wenn der Nutzer eine andere App öffnet.
Informationen zur Verwendung dieser Funktion in Ihrer App finden Sie unter Cursorerfassung.
App-Kategorien
Unter Android 8.0 (API-Ebene 26) kann für jede App eine Kategorie angegeben werden, in die sie gehört. Mit diesen Kategorien werden Apps mit ähnlichem Zweck oder ähnlicher Funktion gruppiert, wenn sie Nutzern präsentiert werden, z. B. bei der 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 konfigurieren, welche Kanäle auf dem Startbildschirm angezeigt werden sollen. Der Android TV-Startbildschirm enthält auch die Zeile „Als Nächstes ansehen“, die basierend auf den Sehgewohnheiten des Nutzers mit Programmen aus Apps gefüllt wird. Apps können auch Videovorschauen, die automatisch abgespielt werden, wenn sich ein Nutzer auf ein Programm konzentriert. Die APIs zum Befüllen von Kanälen und Programmen sind Teil der TvProvider APIs, die mit Android 8.0 als Android-Supportbibliotheksmodul bereitgestellt werden.
AnimatorSet
Ab Android 8.0 (API-Level 26) unterstützt die AnimatorSet
API jetzt das Suchen und Abspielen in umgekehrter Reihenfolge. Mit der Suchfunktion können Sie die Position der Animation auf einen bestimmten
zu einem bestimmten Zeitpunkt. Die umgekehrte Wiedergabe ist nützlich, wenn deine App Animationen enthält
für Aktionen, die rückgängig gemacht werden können. Anstatt zwei separate Animationen zu definieren, können Sie dieselbe Animation rückwärts abspielen.
Eingabe und Navigation
Tastaturnavigationscluster
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 auf Chromebooks die Tastenkombination „Meta + Tab“ oder „Suche + Tab“ drücken, um von einem Cluster zum nächsten zu wechseln. Gute Beispiele für Cluster sind Seitenleisten, Navigationsleisten, Hauptinhaltsbereiche und Elemente, die viele untergeordnete Elemente enthalten können.

So erstellen Sie ein View
- oder ViewGroup
-Element:
einen Cluster, legen Sie den
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. Nicht verschachtelte Cluster können jedoch auf verschiedenen Hierarchieebenen erscheinen. Wenn Sie versuchen,
verschachteln, behandelt das Framework nur die obersten
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 anwenden, können Nutzer nicht mit der Tabulatortaste oder den Pfeiltasten zwischen dem Cluster und anderen Bereichen wechseln. Stattdessen müssen sie die Tastenkombination für die Clusternavigation drücken.
Standardfokus ansehen
Unter Android 8.0 (API-Level 26) können Sie der View
zuweisen, dass sie den Fokus erhalten soll, nachdem eine (erneut) erstellte Aktivität fortgesetzt wurde und der Nutzer eine Navigationstaste auf der Tastatur drückt, z. B. die Tabulatortaste. Um diese Einstellung auf „Standardmäßig fokussiert“ anzuwenden
eines View
-Elements festlegen,
android:focusedByDefault
-Attribut true
in der
Layout-XML-Datei, die das UI-Element enthält, oder übergeben Sie true
an
setFocusedByDefault()
in deinem
die UI-Logik der App.
Sprachausgabe
Aktivitäten und Dienste können Instanzen von TextToSpeech
verwenden, 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
.
Wenn Sie diese Verbesserungen der Sprachausgabe in Ihrer App verwenden möchten, registrieren Sie eine Instanz von UtteranceProgressListener
. Im Rahmen der
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. Deine App kann dann auf diesen Callback reagieren, z. B. durch
den Textbereich markiert, der der Äußerung zugeordnet ist.
Weitere Informationen zum Überwachen des Wiedergabefortschritts einer Sprachausgabe-Engine findest du in der Referenz für die Klasse UtteranceProgressListener
.
System
Neue StrictMode-Detektoren
Android 8.0 (API-Ebene 26) enthält drei neue StrictMode-Detektoren, mit denen sich potenzielle Fehler in Ihrer App leichter finden lassen:
detectUnbufferedIo()
erkennt, wenn kann Ihre App Daten ohne Zwischenspeichern lesen oder schreiben, was sich erheblich 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-Ebene 26) bietet bessere Anleitungen und Verhaltensweisen für im Cache gespeicherte Daten. Jede App erhält jetzt ein Speicherplatzkontingent für zwischengespeicherte Daten, das von getCacheQuotaBytes(UUID)
zurückgegeben wird.
Wenn das System Speicherplatz freigeben muss, werden zuerst die Cachedateien von Apps gelöscht, die ihr zugewiesenes Kontingent am weitesten überschreiten. Wenn Sie also die Größe Ihrer im Cache gespeicherten Daten unter dem zugewiesenen Kontingent halten, werden Ihre Cachedateien bei Bedarf als Letztes im System gelöscht. 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 des 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.
Seitenwechsel für Contentanbieter
Wir haben die Contentanbieter aktualisiert, um das Laden eines großen Datensatzes Seite für Seite zu unterstützen. Beispielsweise kann eine Foto-App mit vielen Tausenden von Bildern nach einer Teilmenge der Daten abfragen, die auf einer Seite angezeigt werden sollen. Jede Seite mit Ergebnissen, die von einem Inhaltsanbieter zurückgegeben wird, wird durch ein einzelnes Cursor-Objekt dargestellt. Sowohl ein Client als auch ein Anbieter müssen das Auslagern implementieren, um diese Funktion nutzen zu können.
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 für die Aktualisierung von Inhalten hinzufügen, indem Sie ContentProvider
erweitern. 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 Clientanwendung kann aktualisierte Inhalte explizit anfordern, indem eine andere Methode aufgerufen wird, die ebenfalls refresh()
genannt wird. 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 Ihre 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 Änderungen an JobScheduler
gehören:
-
Sie können jetzt einem geplanten Auftrag eine Arbeitswarteschlange zuordnen. So fügen Sie eine Aufgabe hinzu:
eines Jobs erstellen, rufen Sie
JobScheduler.enqueue()
Wenn der Job ausgeführt wird, können ausstehende Arbeiten aus der Warteschlange entfernt und verarbeitet werden. Diese Funktion unterstützt viele Anwendungsfälle, für die zuvor ein Hintergrunddienst gestartet werden musste, insbesondere Dienste, dieIntentService
implementieren. -
Die Android-Supportbibliothek 26.0.0 enthält eine neue
JobIntentService
-Klasse, die dieselben Funktionen wieIntentService
bietet, aber bei der Ausführung unter Android 8.0 (API-Ebene 26) oder höher Jobs anstelle von Diensten verwendet. -
Sie können jetzt
JobInfo.Builder.setClipData()
anrufen, um eineClipData
mit einem Job zu verknüpfen. Mit dieser Option können Sie URI-Berechtigungen einem Job zuweisen, ähnlich wie diese Berechtigungen anContext.startService()
weitergegeben werden können. Sie können URI-Berechtigungen auch mit Intents in Arbeitswarteschlangen verwenden. -
Geplante Jobs unterstützen jetzt mehrere neue Einschränkungen:
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 Grenzwert erreicht oder unterschreitet. Bei diesem Wert wird auf dem Gerät das Systemdialogfeld Akkustand niedrig angezeigt.
NETWORK_TYPE_METERED
- Job erfordert eine kostenpflichtige Netzwerkverbindung, wie die meisten mobilen Daten Abos.
Benutzerdefinierter Datenspeicher
Unter Android 8.0 (API-Ebene 26) können Sie für Ihre Einstellungen einen benutzerdefinierten Datenspeicher angeben. Das kann nützlich sein, wenn Ihre App die Einstellungen in einer Cloud oder einer lokalen Datenbank speichert oder wenn die Einstellungen gerätespezifisch sind. Weitere Informationen zur Implementierung des Datenspeichers finden Sie unter Benutzerdefinierter Datenspeicher.
Medienverbesserungen
VolumeShaper
Es gibt eine neue VolumeShaper
-Klasse. Verwenden Sie
kurze automatische Lautstärkeübergänge wie Über- und Überblendungen.
Weitere Informationen finden Sie unter Amplitude mit VolumeShaper steuern.
Verbesserungen beim Audiofokus
Audio-Apps teilen die Audioausgabe auf einem Gerät, indem sie den Audiofokus anfordern und wieder aufheben.
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 die folgenden Medienklassen definiert:
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
Die Messwerte werden für jede Instanz separat erfasst und bleiben für die gesamte Lebensdauer der Instanz erhalten. Wenn keine Messwerte verfügbar sind, gibt die Methode null. Welche Messwerte zurückgegeben werden, hängt 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. Er 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 zu einem Frame (nicht unbedingt ein Synchron- oder Schlüsselframe), der mit einer Datenquelle verknüpft ist, die sich am nächsten zur angegebenen Zeit befindet oder zu der die angegebene Zeit gehört.
Bei kontinuierlicher Suche sollten Apps einen der SEEK_
-Modi anstelle von SEEK_CLOSEST
verwenden, da dieser relativ langsamer, aber genauer ist.
MediaRecorder
- 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);
MediaRecorder.OutputFormat
ansehen - Der
MediaMuxer
kann jetzt beliebig viele Audio- und Videostreams verarbeiten. Du bist nicht mehr auf einen Audio- und/oder einen Videotrack beschränkt. MitaddTrack()
kannst du beliebig viele Titel zusammenmischen. MediaMuxer
kann auch einen oder mehrere Metadatentracks hinzufügen, die benutzerdefinierte pro Frame enthalten. Informationen. Das Format der Metadaten wird von Ihrer Anwendung definiert. 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.
Wenn du einen Metadaten-Track hinzufügst, muss das MIME-Format des Tracks mit dem Präfix „application/“ beginnen. Das Schreiben von Metadaten entspricht dem Schreiben von Video-/Audiodaten, mit der Ausnahme, 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 derselben Zeitbasis wie die Video- und Audiotracks entsprechen.
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 du die Datei mit dem Metadaten-Track mit MediaExtractor
extrahierst, wird das MIME-Format der Metadaten in MediaFormat
extrahiert.
Verbesserter Zugriff auf Mediendateien
Mit dem SAF (Storage Access Framework) können Apps eine benutzerdefinierte DocumentsProvider
bereitstellen, über die andere Apps auf Dateien in einer Datenquelle zugreifen können. Tatsächlich kann ein Dokumentanbieter auch Zugriff auf Dateien gewähren, die sich im Netzwerkspeicher befinden oder ein Protokoll wie Media Transfer Protocol (MTP) verwenden.
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 der Dateibeschreibung. Der Mediaplayer kann die Datei ohne die Datei nicht wiedergeben. Beschreibung, sodass die Wiedergabe erst beginnen kann, wenn der Dokumentanbieter den Vorgang abgeschlossen hat. die Datei herunterladen.
- Manager von Mediensammlungen, wie etwa 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 anhand der URI. Dadurch ist es für diese Arten von Apps schwierig, Nutzern wo eine Mediendatei gespeichert wird.
Mit Android 8.0 lässt sich jeder dieser Herausforderungen meistern, indem der Speicherzugriff verbessert wird. 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. Der SAF sendet dann Anfragen für einzelne Bytes an den Dokumentenanbieter. 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. Der SAF ruft den Rückruf immer dann auf, wenn eine Clientanwendung Dateivorgänge auf den vom Dokumentanbieter zurückgegebenen Dateideskriptor ausführt.
Direkter Zugriff auf Dokumente
Ab Android 8.0 (API-Ebene 26) können Sie mit der Methode getDocumentUri()
einen URI abrufen, der auf dasselbe Dokument verweist wie die angegebene mediaUri
.
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 durchlaufen 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 ausgehend vom Stammverzeichnis eines Dateisystems anhand der
ID. Die Methode gibt diesen Pfad in einem
DocumentsContract.Path
-Objekt. Wenn ein Dateisystem mehrere Pfade zum selben Dokument definiert hat, gibt die Methode den Pfad zurück, der am häufigsten verwendet wird, um das Dokument mit der angegebenen ID aufzurufen.
Diese Funktion ist in den folgenden Szenarien besonders nützlich:
- Ihre App verwendet ein Dialogfeld „Als Datei speichern“, in dem der Speicherort eines bestimmten Dokuments angezeigt wird.
- Ihre App zeigt Ordner in einer Suchergebnisseite an und muss die untergeordneten Dokumente in einem bestimmten Ordner laden, wenn der Nutzer diesen Ordner auswählt.
Hinweis: Wenn Ihre App nur auf einige der Dokumente im Pfad zugreifen darf, enthält der Rückgabewert von findDocumentPath()
nur die Ordner und Dokumente, auf die Ihre App zugreifen kann.
Überwachen der Audiowiedergabe
Der AudioManager
-Systemdienst verwaltet eine Liste der aktiven AudioPlaybackConfiguration
-Objekte, von denen jedes Informationen zu einer bestimmten Audiowiedergabesitzung enthält. Ihre App kann
rufen Sie den Satz derzeit aktiver Konfigurationen ab, indem Sie
getActivePlaybackConfigurations()
Ab Android 8.0 (API-Ebene 26) können Sie einen Rückruf registrieren, der Ihre App benachrichtigt, wenn sich eines oder mehrere AudioPlaybackConfiguration
-Objekte geändert haben. Rufen Sie dazu registerAudioPlaybackCallback()
auf und übergeben Sie 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
Wi‑Fi Aware
Android 8.0 (API-Ebene 26) unterstützt Wi‑Fi Aware, das auf der NAN-Spezifikation (Neighbor Awareness Networking) basiert. 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. Informationen zur Einbindung von Wi‑Fi Aware in Ihre App finden Sie unter Wi‑Fi Aware.
Bluetooth
Android 8.0 (API-Ebene 26) erweitert die Bluetooth-Unterstützung der Plattform um die folgenden 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 Kopplung des Companion-Geräts.
Weitere Informationen zur Verwendung von Bluetooth auf Android-Geräten finden Sie im Leitfaden Bluetooth. Änderungen an Bluetooth, die nur für Android 8.0 (API-Level 26) gelten, finden Sie auf der Seite Verhaltensänderungen unter Android 8.0 im Abschnitt Bluetooth.
Inhalte teilen
Intelligentes Teilen
Android 8.0 (API-Ebene 26) lernt die personalisierten Freigabeeinstellungen der Nutzer kennen und erkennt für jede Art von Inhalt besser, welche Apps zum Teilen geeignet sind. Wenn ein Nutzer beispielsweise ein Foto von einem Beleg macht, kann Android 8.0 eine App zum Erfassen von Ausgaben vorschlagen. Wenn der Nutzer ein Selfie macht, kann eine Social-Media-App das Bild besser verarbeiten. Android 8.0 lernt diese Muster automatisch anhand der personalisierten Einstellungen der Nutzer.
Die intelligente Freigabe funktioniert auch für andere Inhaltstypen als image
, z. B. audio
, video
, text
und URL
.
Wenn Sie die intelligente Freigabe aktivieren möchten, fügen Sie dem Intent, über den die Inhalte geteilt werden, eine ArrayList
mit bis zu drei String-Anmerkungen hinzu. Die Anmerkungen sollten die wichtigsten Komponenten 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 );
Ausführliche Informationen zu Anmerkungen zur intelligenten Freigabe finden Sie 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 eigene Bedienungshilfen erstellen:
- Neue Volumenkategorie für die Anpassung Barrierefreiheit Lautstärke
- Fingerabdruck Touch-Gesten als Eingabemechanismus verwenden.
- Mehrsprachig Sprachausgabe.
- Eine hardwarebasierte Verknüpfung für Bedienungshilfen, mit der Sie schnell auf einen bevorzugten Bedienungshilfendienst zugreifen können.
- 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).
- Standardisierte einseitige Werte
- Mehrere Funktionen für wird verarbeitet Text, einschließlich Hinweistext und Positionen von Bildschirmtexten, Zeichen.
Sicherheit und Datenschutz
Berechtigungen
Mit Android 8.0 (API-Ebene 26) werden mehrere neue Berechtigungen im Zusammenhang mit der Telefonie eingeführt:
- Mit der Berechtigung
ANSWER_PHONE_CALLS
kann Ihre App eingehende Anrufe programmatisch annehmen. Wenn Sie einen eingehenden Anruf in Ihrer App verarbeiten möchten, können Sie die MethodeacceptRingingCall()
verwenden. - Mit der Berechtigung
READ_PHONE_NUMBERS
erhält Ihre App Lesezugriff auf die auf einem Gerät gespeicherten Telefonnummern.
Beide Berechtigungen sind als gefährlich eingestuft und gehören zur Berechtigungsgruppe PHONE
.
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 mussten Apps, die die Liste der Nutzerkonten im Blick behalten wollten, Aktualisierungen zu allen Konten erhalten, einschließlich Konten mit nicht zugehörigen Typen. 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)
: Mit dieser Option wird die Sichtbarkeit für eine bestimmte Kombination aus Nutzerkonto und Paket festgelegt.-
getAccountVisibility(android.accounts.Account, java.lang.String)
: Ermittelt die Sichtbarkeit für eine bestimmte Kombination aus Nutzerkonto und Paket. -
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 Authenticatorn, 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 es Authenticatorn, die Sichtbarkeitswerte eines Kontos zu initialisieren. -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
:fügt demAccountManager
-Objekt einenOnAccountsUpdateListener
-Listener hinzu. Das System ruft diesen Listener auf wenn sich die Liste der Konten auf dem Gerät ändert.
Mit Android 8.0 (API-Ebene 26) werden zwei spezielle Werte für den Paketnamen eingeführt, um Sichtbarkeitsstufen für Anwendungen anzugeben, die nicht mit der Methode setAccountVisibility(android.accounts.Account, java.lang.String, int)
festgelegt wurden. 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
ist ein Standardwert für die Sichtbarkeit von Apps, die zuvor nicht festgelegt wurden und für die PACKAGE_NAME_KEY_LEGACY_VISIBLE
nicht gilt.
Weitere Informationen zu den neuen APIs für den Kontozugriff und die Kontoermittlung finden Sie in den Referenzen für AccountManager
und OnAccountsUpdateListener
.
Testen
Instrumentierungstests
Android 8.0 (API-Level 26) bietet folgende zusätzliche Unterstützung für die Instrumentierungstests Ihrer App:
Für nicht standardmäßige App-Prozesse ausführen
Sie können jetzt angeben, dass ein bestimmter Instrumentierungstest für einen Prozess außerhalb des Standardprozesses Ihrer App ausgeführt werden soll. Diese Konfiguration ist nützlich, wenn Ihre App mehrere Aktivitäten enthält, die in verschiedenen Prozessen ausgeführt werden.
Wenn Sie eine nicht standardmäßige Prozessinstrumentierung definieren möchten, rufen Sie die Manifestdatei und dann das gewünschte Element <instrumentation>
auf. 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 mit getProcessName()
prüfen, welcher Prozess getestet wird.
Ergebnisse während eines Tests melden
Sie können jetzt Ergebnisse während der Ausführung des Instrumentierungstests melden, anstatt danach. Rufen Sie dazu addResults()
auf.
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 Klasse Instrumentation.ActivityMonitor
, um einen bestimmten Intent zu verarbeiten, den Ihre 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 Mock-Intent-Logik in Ihren Tests verwenden, können Sie sich darauf konzentrieren, wie Ihre Aktivität den Intent vorbereitet und verarbeitet, den Sie an eine andere Aktivität oder eine ganz andere App übergeben.
Laufzeit und Werkzeuge
Plattformoptimierungen
Android 8.0 (API-Level 26) bietet Laufzeit- und andere Optimierungen der Plattform, die 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 Bootzeiten sowie zu einer besseren Leistung des Betriebssystems und der 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 möchten, sollten Sie die 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 die auf dem Gerät vorhandenen Lokalisierungsdaten. Sie können den APK-Footprint reduzieren, indem Sie die ICU4J-Bibliotheken nicht in Ihrem APK kompilieren.
Tabelle 1 ICU-, CLDR- und Unicode-Versionen, die in Android verwendet werden.
Android-API-Level | ICU-Version | CLDR-Version | Unicode-Version |
---|---|---|---|
Android 7.0 (API-Ebene 24), Android 7.1 (API-Ebene 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
Für Geräte mit Android 8.0 (API-Level 26) wurden neue Unternehmensfunktionen und APIs eingeführt. 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.
- Durch Verbesserungen der Nutzerfreundlichkeit bei der Bereitstellung (einschließlich neuer Anpassungsoptionen) wird die Einrichtungszeit verkürzt.
- Mit den neuen Einstellungen für Bluetooth, WLAN, Sicherung und Sicherheit können Unternehmen mehr Funktionen des Geräts verwalten. Mit dem Logging der Netzwerkaktivität können Unternehmen Störungen.
Weitere Informationen zu diesen und anderen neuen Android Enterprise-APIs und -Funktionen Siehe Android im Unternehmen.