Android 7.0 für Entwickler

Android 7.0 Nougat bietet Nutzern und Entwicklern eine Vielzahl neuer Funktionen. In diesem Dokument wird erläutert, was es für Entwickler Neues gibt.

Du solltest dir die Änderungen beim Verhalten in Android 7.0 ansehen. Dort erfährst du auch, in welchen Bereichen Plattformänderungen sich auf deine Apps auswirken können.

Weitere Informationen zu den Funktionen für Nutzer von Android 7.0 finden Sie unter www.android.com.

Unterstützung des Mehrfenstermodus

Mit Android 7.0 führen wir eine neue und häufig gewünschte Multitasking-Funktion auf der Plattform ein: die Unterstützung des Mehrfenstermodus.

Nutzer können jetzt zwei Apps gleichzeitig auf dem Bildschirm öffnen.

  • Auf Smartphones und Tablets mit Android 7.0 können Nutzer zwei Apps nebeneinander oder übereinander im Splitscreen-Modus ausführen. Nutzende können die Größe der Apps anpassen, indem sie die Trennlinie zwischen ihnen ziehen.
  • Auf Android TV-Geräten können Apps sich in den Bild-im-Bild-Modus versetzen. Dadurch können sie weiterhin Inhalte anzeigen, während der Nutzer andere Apps durchsucht oder mit ihnen interagiert.
Laufende Apps auf Mobilgeräten im Splitscreen-Modus

Abbildung 1: Apps, die im geteilten Bildschirmmodus ausgeführt werden.

Besonders auf Tablets und anderen Geräten mit größeren Bildschirmen bietet die Mehrfenster-Unterstützung neue Möglichkeiten, mit Nutzern zu interagieren. Sie können sogar Drag-and-drop in Ihrer App aktivieren, damit Nutzer Inhalte bequem in Ihre App oder aus Ihrer App ziehen können.

Es ist ganz einfach, die Unterstützung für den Mehrfenstermodus in Ihre App zu integrieren und zu konfigurieren, wie die Mehrfensteranzeige gehandhabt wird. Sie können beispielsweise die minimal zulässigen Dimensionen Ihrer Aktivität angeben, um Nutzer daran zu hindern, die Aktivität unter diese Größe zu ändern. Du kannst den Mehrfenstermodus auch für deine App deaktivieren, damit das System deine App nur im Vollbildmodus anzeigt.

Weitere Informationen finden Sie in der Entwicklerdokumentation zum Mehrfenster-Support.

Verbesserte Benachrichtigungen

In Android 7.0 haben wir die Benachrichtigungen neu gestaltet, damit sie einfacher und schneller zu bedienen sind. Zu den Änderungen gehören:

  • Vorlagenaktualisierungen: Wir aktualisieren die Benachrichtigungsvorlagen, um Hero-Images und Avatare in den Vordergrund zu stellen. Entwickler können diese neuen Vorlagen mit minimalen Anpassungen ihres Codes nutzen.
  • Anpassung des Nachrichtenstils: Mit der Klasse MessagingStyle können Sie weitere Labels der Benutzeroberfläche anpassen, die Ihren Benachrichtigungen zugeordnet sind. Sie können die Nachricht, den Titel der Unterhaltung und die Inhaltsansicht konfigurieren.
  • Gruppierte Benachrichtigungen: Das System kann Nachrichten gruppieren, z. B. nach Nachrichtenthema, und die Gruppe anzeigen. Ein Nutzer kann für sie Aktionen wie Schließen oder Archivieren ausführen. Wenn du Benachrichtigungen für Android Wear implementiert hast, bist du mit diesem Modell bereits vertraut.
  • Direktantwort: Bei Apps für die Echtzeitkommunikation unterstützt das Android-System Inline-Antworten, damit Nutzer direkt über die Benachrichtigungsoberfläche auf eine SMS oder SMS antworten können.
  • Benutzerdefinierte Ansichten: Mit zwei neuen APIs können Sie Systemdekorationen wie Benachrichtigungsheader und Aktionen nutzen, wenn Sie benutzerdefinierte Ansichten in Benachrichtigungen verwenden.
Mobilgerät, auf dem Benachrichtigungen zu gruppierten Nachrichten angezeigt werden
Mobilgerät, auf dem eine Benachrichtigung zu einer einzelnen Nachricht angezeigt wird
Mobilgerät, auf dem eine Inline-Antwort innerhalb der Benachrichtigungsoberfläche angezeigt wird

Abbildung 2: Gruppierte Benachrichtigungen und direkte Antworten.

Informationen zum Implementieren der neuen Funktionen finden Sie unter Benachrichtigungen.

Profilgestützte JIT/AOT-Kompilierung

In Android 7.0 haben wir einen JIT-Compiler (Just in Time) mit Codeprofilen zu ART hinzugefügt, mit dem die Leistung von Android-Anwendungen während der Ausführung kontinuierlich verbessert werden kann. Der JIT-Compiler ergänzt den aktuellen AOT-Compiler (ART) von ART und hilft, die Laufzeitleistung zu verbessern, Speicherplatz zu sparen und Anwendungsupdates und Systemupdates zu beschleunigen.

Mit der profilgestützten Kompilierung kann ART die AOT/JIT-Kompilierung für jede Anwendung gemäß ihrer tatsächlichen Nutzung und den Bedingungen auf dem Gerät verwalten. ART verwaltet beispielsweise ein Profil der Hot-Methoden jeder Anwendung und kann diese Methoden vorkompilieren und im Cache speichern, um eine optimale Leistung zu erzielen. Andere Teile der App bleiben unkompiliert, bis sie tatsächlich verwendet werden.

Die profilgestützte Kompilierung verbessert nicht nur die Leistung für wichtige Teile der Anwendung, sondern trägt auch dazu bei, die RAM-Gesamtauslastung einer Anwendung einschließlich zugehöriger Binärprogramme zu reduzieren. Diese Funktion ist besonders auf Geräten mit wenig Arbeitsspeicher wichtig.

ART verwaltet profilbasierte Kompilierung so, dass die Belastung des Geräteakkus minimiert wird. Eine Vorkompilierung erfolgt nur, wenn das Gerät inaktiv ist und aufgeladen wird. Dadurch wird Zeit und Akku gespart.

Schnellpfad zur App-Installation

Einer der größten Vorteile des JIT-Compilers von ART ist die Geschwindigkeit von App-Installationen und Systemupdates. Selbst große Apps, deren Optimierung und Installation unter Android 6.0 mehrere Minuten erforderlich war, können jetzt in Sekundenschnelle installiert werden. Systemupdates erfolgen außerdem schneller, da kein Optimierungsschritt mehr erforderlich ist.

Stromsparmodus unterwegs...

Mit Android 6.0 wurde der Stromsparmodus eingeführt. Dieser Systemmodus spart den Akku, indem die CPU- und Netzwerkaktivitäten von Apps aufgeschoben werden, wenn das Gerät inaktiv ist, z. B. wenn es auf einem Tisch oder in einer Schublade liegt.

Unter Android 7.0 geht der Stromsparmodus noch einen Schritt weiter und schont unterwegs den Akku. Immer wenn der Bildschirm für eine bestimmte Zeit ausgeschaltet und das Gerät vom Stromnetz getrennt ist, wendet er einen Teil der bekannten CPU- und Netzwerkeinschränkungen auf Apps an. Das bedeutet, dass Nutzer den Akku schonen können, selbst wenn sie ihre Geräte in der Tasche tragen.

Darstellung, wie der Stromsparmodus eine erste Ebene von Einschränkungen der Systemaktivität anwendet, um die Akkulaufzeit zu verlängern

Abbildung 3: Im Stromsparmodus werden jetzt Einschränkungen angewendet, um die Akkulaufzeit auch dann zu verlängern, wenn das Gerät nicht steht.

Kurz nachdem sich der Bildschirm im Akkubetrieb ausgeschaltet hat, wird der Netzwerkzugriff eingeschränkt und Jobs und Synchronisierungen werden aufgeschoben. Während kurzer Wartungsfenster wird den Anwendungen der Netzwerkzugriff gewährt und alle ihre zurückgestellten Jobs/Synchronisierungen werden ausgeführt. Wenn du den Bildschirm einschaltest oder das Gerät anschließt, wird der Stromsparmodus deaktiviert.

Wenn das Gerät wieder steht, das Display ausgeschaltet und für einen bestimmten Zeitraum eingeschaltet ist, wendet der Stromsparmodus die vollständigen CPU- und Netzwerkeinschränkungen auf PowerManager.WakeLock, AlarmManager-Alarme und GPS-/WLAN-Scans an.

Die Best Practices zum Anpassen der App an den Stromsparmodus sind immer gleich, unabhängig davon, ob sich das Gerät bewegt oder nicht. Wenn du deine App also bereits so aktualisiert hast, dass der Stromsparmodus reibungslos gehandhabt wird, bist du startklar. Falls nicht, passe deine App jetzt an den Stromsparmodus an.

Project Svelte: Hintergrundoptimierungen

Project Svelte ist ein fortlaufendes Bestreben, die RAM-Nutzung durch Systeme und Apps auf den verschiedenen Android-Geräten im Ökosystem zu minimieren. In Android 7.0 konzentriert sich Project Svelte auf die Optimierung der Hintergrundausführung von Apps.

Die Hintergrundverarbeitung ist ein wesentlicher Bestandteil der meisten Apps. Bei richtiger Anwendung kann die Nutzererfahrung erstaunlich werden – sofort, schnell und kontextsensitiv. Bei unsachgemäßer Handhabung kann die Hintergrundverarbeitung unnötig den RAM (und den Akku) verbrauchen und die Systemleistung für andere Anwendungen beeinträchtigen.

Seit Android 5.0 ist JobScheduler die bevorzugte Methode, um im Hintergrund für die Nutzer gut zu arbeiten. Anwendungen können Jobs planen und gleichzeitig das System anhand von Arbeitsspeicher-, Energie- und Verbindungsbedingungen optimieren lassen. JobScheduler ist einfach und kontrolliert, und wir möchten, dass alle Apps ihn nutzen.

Eine weitere gute Option ist GCMNetworkManager, ein Teil der Google Play-Dienste, das eine ähnliche Jobplanung mit Kompatibilität mit Legacy-Versionen von Android bietet.

Wir erweitern JobScheduler und GCMNetworkManager weiterhin, um noch mehr Anwendungsfälle zu decken. Unter Android 7.0 können Sie beispielsweise Hintergrundarbeiten basierend auf Änderungen der Contentanbieter planen. Gleichzeitig beginnen wir, einige ältere Muster einzustellen, die die Systemleistung verringern können, insbesondere auf Geräten mit wenig Arbeitsspeicher.

In Android 7.0 entfernen wir drei häufig verwendete implizite Broadcasts – CONNECTIVITY_ACTION, ACTION_NEW_PICTURE und ACTION_NEW_VIDEO –, da diese die Hintergrundprozesse mehrerer Apps gleichzeitig aktivieren und den Arbeitsspeicher und den Akku belasten können. Wenn deine App diese Informationen erhält, migriere stattdessen zu JobScheduler und den zugehörigen APIs mit Android 7.0.

Weitere Informationen findest du in der Dokumentation zu Hintergrundoptimierungen.

Oberflächenansicht

Android 7.0 bringt synchrone Bewegungen in die SurfaceView-Klasse, die in bestimmten Fällen eine bessere Akkuleistung als TextureView bietet: Beim Rendern von Video- oder 3D-Inhalten verbrauchen Apps mit Scrollen und animierter Videoposition mit SurfaceView weniger Energie als mit TextureView.

Die Klasse SurfaceView ermöglicht eine akkueffizientere Zusammenstellung auf dem Bildschirm, da sie in dedizierter Hardware, getrennt vom App-Fensterinhalt, zusammengesetzt ist. Dadurch werden weniger Zwischenkopien erstellt als mit TextureView.

Die Inhaltsposition eines SurfaceView-Objekts wird jetzt synchron mit dem enthaltenden App-Inhalt aktualisiert. Eine Folge dieser Änderung ist, dass einfache Übersetzungen oder Skalierungen eines Videos, das in einem SurfaceView abgespielt wird, neben der Ansicht keine schwarzen Balken mehr erzeugen.

Ab Android 7.0 empfehlen wir dringend, den Energieverbrauch mit SurfaceView anstelle von TextureView zu sparen.

Datensparmodus

Datensparmodus in den Einstellungen

Abbildung 4: Datensparmodus.

Während der Lebensdauer eines Mobilgeräts übersteigen die Kosten eines Mobilfunk-Datentarifs in der Regel die Kosten für das Gerät selbst. Für viele Nutzer sind mobile Daten eine kostspielige Ressource, die sie einsparen möchten.

Mit Android 7.0 wird der Datensparmodus eingeführt, ein neuer Systemdienst, der dazu beiträgt, die mobile Datennutzung von Apps zu reduzieren, sei es beim Roaming, gegen Ende des Abrechnungszeitraums oder bei einem kleinen Prepaid-Datenpaket. Mit dem Datensparmodus können Nutzer steuern, wie Apps mobile Daten nutzen. Entwickler können außerdem einen effizienteren Dienst bereitstellen, wenn der Datensparmodus aktiviert ist.

Wenn ein Nutzer den Datensparmodus in den Einstellungen aktiviert und sich das Gerät in einem kostenpflichtigen Netzwerk befindet, blockiert das System die Nutzung von Hintergrunddaten und weist Apps nach Möglichkeit darauf hin, weniger Daten im Vordergrund zu verwenden. So wird z. B. die Bitrate für das Streaming begrenzt, die Bildqualität verringert und das optimistische Precaching aufgeschoben. Nutzer können bestimmten Apps erlauben, im Hintergrund abgerechnete Daten zu nutzen, auch wenn der Datensparmodus aktiviert ist.

Android 7.0 erweitert die ConnectivityManager, um Apps die Möglichkeit zu bieten, die Datenspareinstellungen des Nutzers abzurufen und Änderungen der Einstellungen zu überwachen. Alle Apps sollten prüfen, ob der Nutzer den Datensparmodus aktiviert hat, und die Nutzung von Daten im Vorder- und Hintergrund einschränken.

Vulkan API

Android 7.0 integriert VulkanTM, eine neue 3D-Rendering-API, in die Plattform. Wie OpenGLTM ES ist Vulkan ein offener Standard für 3D-Grafiken und -Rendering, der von der Khronos Group verwaltet wird.

Vulkan wurde von Grund auf so entwickelt, dass die CPU-Auslastung im Treiber minimiert und der GPU-Betrieb von Ihrer Anwendung direkt gesteuert werden kann. Vulkan ermöglicht außerdem eine bessere Parallelisierung, da mehrere Threads Vorgänge wie die Erstellung von Befehlspuffern gleichzeitig ausführen können.

Vulkan-Entwicklungstools und -bibliotheken sind jetzt im Android 7.0 SDK enthalten. Dazu gehören:

  • Überschriften
  • Validierungsebenen (Bibliotheken zur Fehlerbehebung)
  • SPIR-V-Shader-Compiler
  • SPIR-V-Laufzeit-Shader-Kompilierungsbibliothek

Vulkan ist nur für Apps auf Geräten mit Vulkan-fähiger Hardware wie Nexus 5X, Nexus 6P und Nexus Player verfügbar. Wir arbeiten eng mit unseren Partnern zusammen, um Vulkan so schnell wie möglich auf mehr Geräten verfügbar zu machen.

Weitere Informationen finden Sie in der API-Dokumentation.

Tile-API für Schnelleinstellungen

Kacheln für Schnelleinstellungen in der Benachrichtigungsleiste

Abbildung 5: Schnelleinstellungen-Kacheln in der Benachrichtigungsleiste.

Schnelleinstellungen sind eine beliebte und einfache Möglichkeit, wichtige Einstellungen und Aktionen direkt über die Benachrichtigungsleiste anzuzeigen. In Android 7.0 haben wir den Umfang der Schnelleinstellungen erweitert, um sie noch nützlicher und praktischer zu machen.

Wir haben mehr Platz für zusätzliche Schnelleinstellungen-Kacheln hinzugefügt, auf die Nutzer über einen paginierten Anzeigebereich zugreifen können, indem sie nach links oder rechts wischen. Außerdem haben Nutzer die Möglichkeit, selbst zu steuern, welche Schnelleinstellungen-Kacheln angezeigt werden und wo sie angezeigt werden. Nutzer können Kacheln per Drag-and-drop hinzufügen oder verschieben.

Für Entwickler wird mit Android 7.0 außerdem eine neue API hinzugefügt, mit der sie eigene Kacheln für Schnelleinstellungen definieren können, um Nutzern einfachen Zugriff auf wichtige Steuerelemente und Aktionen in Ihrer App zu ermöglichen.

Schnelleinstellungen-Kacheln sind für Steuerelemente oder Aktionen reserviert, die dringend erforderlich oder häufig verwendet werden, und sollten nicht als Verknüpfungen zum Starten einer App verwendet werden.

Nachdem du deine Kacheln definiert hast, kannst du sie den Nutzern anzeigen lassen, die sie per Drag-and-drop den Schnelleinstellungen hinzufügen können.

Informationen zum Erstellen einer Anwendungskachel finden Sie in der Referenzdokumentation zu Tile.

Nummernblockierung

Android 7.0 unterstützt jetzt die Nummernblockierung auf der Plattform und bietet eine Framework-API, mit der Dienstanbieter eine Liste blockierter Nummern verwalten können. Die Standard-SMS-App, die Standard-Telefon-App und die Mobilfunkanbieter-Apps können Daten aus der Liste der blockierten Nummern lesen und in diese schreiben. Andere Apps haben keinen Zugriff auf die Liste.

Da die Nummernblockierung zu einer Standardfunktion der Plattform gemacht wird, bietet Android Apps eine einheitliche Möglichkeit, die Nummernblockierung auf einer Vielzahl von Geräten zu unterstützen. Apps können unter anderem von folgenden Vorteilen profitieren:

  • Bei Anrufen blockierte Nummern werden auch für SMS blockiert
  • Wenn die Funktion „Sichern und wiederherstellen“ aktiviert ist, bleiben blockierte Nummern bestehen, wenn das Gerät zurückgesetzt wird und auf dem Gerät gespeichert ist.
  • Mehrere Apps können dieselbe Liste blockierter Nummern verwenden

Darüber hinaus bedeutet die Einbindung von Mobilfunkanbieter-Apps über Android, dass Mobilfunkanbieter die Liste der blockierten Nummern auf dem Gerät lesen und eine dienstseitige Blockierung für den Nutzer vornehmen können, um zu verhindern, dass unerwünschte Anrufe und SMS den Nutzer über ein Medium wie einen VoIP-Endpunkt oder Weiterleitungstelefone erreichen.

Weitere Informationen finden Sie in der Referenzdokumentation zu BlockedNumberContract.

Anruf-Screening

Unter Android 7.0 kann die standardmäßige Telefon-App eingehende Anrufe filtern. Dazu implementiert die Telefon-App die neue CallScreeningService, die es der Telefon-App ermöglicht, basierend auf dem Call.Details eines eingehenden Anrufs eine Reihe von Aktionen auszuführen, z. B.:

  • Eingehenden Anruf ablehnen
  • Anruf über die Anrufliste nicht zulassen
  • Dem Nutzer keine Benachrichtigung für den Anruf anzeigen

Weitere Informationen finden Sie in der Referenzdokumentation zu CallScreeningService.

Unterstützung mehrerer Sprachen, mehr Sprachen

Unter Android 7.0 können Nutzer jetzt in den Einstellungen mehrere Sprachen auswählen, um zweisprachige Anwendungsfälle besser zu unterstützen. Anwendungen können eine neue API verwenden, um die vom Nutzer ausgewählten Sprachen abzurufen, und dann für Nutzer mit mehreren Sprachen eine ausgefeiltere Nutzererfahrung bieten. So können zum Beispiel Suchergebnisse in mehreren Sprachen angezeigt werden und Webseiten in einer Sprache, die der Nutzer bereits kann, nicht übersetzt werden.

Neben der Unterstützung mehrerer Sprachen bietet Android 7.0 Nutzern auch mehr Sprachen. Es bietet jeweils mehr als 25 Varianten für gängige Sprachen wie Englisch, Spanisch, Französisch und Arabisch. Außerdem werden teilweise über 100 neue Sprachen unterstützt.

Die Liste der vom Nutzer festgelegten Sprachen können Apps durch Aufrufen von LocaleList.GetDefault() abgerufen werden. Um die größere Anzahl von Sprachen zu unterstützen, ändert Android 7.0 die Art und Weise, wie Ressourcen aufgelöst werden. Testen und prüfen Sie, ob Ihre Anwendungen mit der neuen Logik zur Ressourcenauflösung wie erwartet funktionieren.

Informationen zum neuen Verhalten zur Ressourcenauflösung und zu den Best Practices, die Sie befolgen sollten, finden Sie unter Mehrsprachiger Support.

Neue Emojis

Android 7.0 bietet zusätzliche Emojis und Funktionen in Verbindung mit Emojis, darunter Hautton-Emojis und Unterstützung für die Variationsauswahl. Wenn deine App Emojis unterstützt, folge den Richtlinien unten, um diese Emojis nutzen zu können.

  • Überprüfe vor dem Einlegen, ob das Gerät ein Emoji enthält. Mit der Methode hasGlyph(String) kannst du prüfen, welche Emojis in der Systemschriftart vorhanden sind.
  • Prüfen, ob ein Emoji die Variantenauswahl unterstützt. Mit Variantenselektoren kannst du bestimmte Emojis in Farbe oder in Schwarz-Weiß darstellen. Auf Mobilgeräten sollten Emojis Emojis in Farbe und nicht in Schwarz-Weiß dargestellt werden. Wenn in deiner App Emojis jedoch inline mit dem Text angezeigt werden, sollte die Schwarz-Weiß-Variante verwendet werden. Mit der Variationsauswahl können Sie feststellen, ob es für ein Emoji eine Variante gibt. Eine vollständige Liste der Zeichen mit Varianten finden Sie im Abschnitt Emoji-Variantensequenzen in der Unicode-Dokumentation zu Varianten.
  • Prüfen, ob ein Emoji den Hautton unterstützt. Unter Android 7.0 können Nutzer den gerenderten Hautton von Emojis nach ihren Wünschen anpassen. Tastatur-Apps sollten visuelle Hinweise für Emojis mit mehreren Hauttönen liefern und Nutzern die Möglichkeit bieten, ihren bevorzugten Hautton auszuwählen. Mit der Methode hasGlyph(String) kannst du feststellen, welche System-Emojis Hauttonmodifikatoren haben. Informationen dazu, welche Emojis Hauttöne verwenden, findest du in der Unicode-Dokumentation.

ICU4J-APIs unter Android

Android 7.0 bietet jetzt einen Teil der ICU4J APIs im Android-Framework unter dem Paket android.icu. Die Migration ist einfach und umfasst im Wesentlichen nur den Wechsel vom Namespace com.java.icu zu android.icu. Wenn du bereits ein ICU4J-Bundle in deinen Apps verwendest, kann der Wechsel zu den im Android-Framework bereitgestellten android.icu APIs zu erheblichen Einsparungen bei der APK-Größe führen.

Weitere Informationen zu den Android ICU4J APIs finden Sie unter ICU4J-Support.

WebView

Chrome + WebView

Ab Chrome-Version 51 unter Android 7.0 und höher wird das Chrome APK auf deinem Gerät verwendet, um Android System WebViews bereitzustellen und zu rendern. Dieser Ansatz verbessert die Arbeitsspeichernutzung auf dem Gerät selbst und verringert die Bandbreite, die erforderlich ist, um WebView auf dem neuesten Stand zu halten, da das eigenständige WebView APK nicht mehr aktualisiert wird, solange Chrome aktiviert bleibt.

Sie können Ihren WebView-Anbieter auswählen, indem Sie die Entwickleroptionen aktivieren und WebView-Implementierung auswählen. Du kannst jede kompatible Chrome-Version (Entwickler-, Beta- oder stabile Version), die auf deinem Gerät installiert ist, oder das eigenständige WebView APK als WebView-Implementierung verwenden.

Multiprocess

Ab Chrome-Version 51 in Android 7.0 führt WebView Webinhalte in einem separaten Sandbox-Prozess aus, wenn die Entwickleroption „Multiprocess WebView“ aktiviert ist.

Bevor wir die Multiprozess-WebView in einer zukünftigen Android-Version aktivieren, interessieren wir uns für Feedback zur Kompatibilität und Laufzeitleistung in N. In dieser Version sind Regressionen bei der Startzeit, der gesamten Arbeitsspeichernutzung und der Leistung beim Software-Rendering zu erwarten.

Wenn Sie unerwartete Probleme im Multiprozessmodus feststellen, würden wir gerne davon erfahren. Bitte wenden Sie sich über den Chromium-Bug Tracker an das WebView-Team.

JavaScript wird vor dem Seitenaufbau ausgeführt

Ab Apps, die auf Android 7.0 ausgerichtet sind, wird der JavaScript-Kontext beim Laden einer neuen Seite zurückgesetzt. Derzeit wird der Kontext für die erste Seite übernommen, die in einer neuen WebView-Instanz geladen wird.

Entwickler, die JavaScript in WebView einfügen möchten, sollten das Skript ausführen, nachdem der Ladevorgang der Seite begonnen hat.

Standortbestimmung an unsicheren Ursprüngen

Ab Apps, die auf Android 7.0 ausgerichtet sind, ist die Geolocation API nur noch bei sicheren Ursprüngen (über HTTPS) zulässig. Diese Richtlinie dient dem Schutz der privaten Informationen von Nutzern, wenn sie eine unsichere Verbindung verwenden.

Mit WebView Beta testen

WebView wird regelmäßig aktualisiert. Wir empfehlen daher, die Kompatibilität mit deiner App regelmäßig über den Betakanal von WebView zu testen. Wenn du Vorabversionen von WebView unter Android 7.0 testen möchtest, musst du entweder Chrome Dev oder Chrome Beta herunterladen, installieren und wie oben beschrieben in den Entwickleroptionen als WebView-Implementierung auswählen. Bitte melde Probleme über den Chromium-Tracker für Programmfehler, damit wir sie beheben können, bevor eine neue Version von WebView veröffentlicht wird.

OpenGLTM ES 3.2 API

Android 7.0 bietet zusätzliche Framework-Schnittstellen und Plattformunterstützung für OpenGL ES 3.2, einschließlich:

  • Alle Erweiterungen aus dem Android Extension Pack (AEP), mit Ausnahme von EXT_texture_sRGB_decode
  • Gleitkomma-Framebuffer für HDR und verzögerte Schattierung
  • BaseVertex-Draw-Aufrufe für bessere Batch- und Streaming-Vorgänge.
  • Robuste Zwischenspeicherzugriffssteuerung zur Reduzierung des WebGL-Aufwands

Die Framework API für OpenGL ES 3.2 unter Android 7.0 wird mit der Klasse GLES32 bereitgestellt. Wenn du OpenGL ES 3.2 verwendest, musst du die Anforderung in deiner Manifestdatei mit dem Tag <uses-feature> und dem Attribut android:glEsVersion angeben.

Informationen zur Verwendung von OpenGL ES und zum Prüfen der unterstützten OpenGL ES-Version eines Geräts zur Laufzeit finden Sie im Handbuch zur OpenGL ES API.

Android TV-Aufzeichnung

Unter Android 7.0 können jetzt Inhalte der Android TV-Eingabedienste über neue Aufnahme-APIs aufgezeichnet und wiedergegeben werden. Zusätzlich zu vorhandenen zeitversetzten APIs können TV-Eingabedienste steuern, welche Kanaldaten aufgezeichnet werden und wie aufgezeichnete Sitzungen gespeichert werden, und sie können Nutzerinteraktionen mit aufgezeichneten Inhalten verwalten.

Weitere Informationen findest du unter Android TV Recording APIs.

Android for Work

Android for Work bietet viele neue Funktionen und APIs für Geräte mit Android 7.0. Im Folgenden finden Sie einige Highlights. Eine vollständige Liste der Funktionen finden Sie in der Liste der Android Enterprise-Funktionen.

Sicherheitsherausforderung des Arbeitsprofils

Profilinhaber, die auf das N SDK ausgerichtet sind, können für Anwendungen, die im Arbeitsprofil ausgeführt werden, eine separate Sicherheitsherausforderung festlegen. Die geschäftliche Identitätsbestätigung wird angezeigt, wenn ein Nutzer versucht, geschäftliche Apps zu öffnen. Nach erfolgreichem Abschluss der Sicherheitsprüfung wird das Arbeitsprofil entsperrt und bei Bedarf entschlüsselt. Als Profilinhaber wird der Nutzer von ACTION_SET_NEW_PASSWORD aufgefordert, eine geschäftliche Identitätsbestätigung einzurichten, und ACTION_SET_NEW_PARENT_PROFILE_PASSWORD fordert den Nutzer auf, eine Gerätesperre einzurichten.

Profilinhaber können mithilfe von setPasswordQuality(), setPasswordMinimumLength() und ähnlichen Methoden eigene Richtlinien für Sicherheitscodes für die geschäftliche Herausforderung festlegen, z. B. wie lang die PIN sein muss oder ob das Profil mit einem Fingerabdruck entsperrt werden kann. Der Profilinhaber kann die Gerätesperre auch mithilfe der DevicePolicyManager-Instanz festlegen, die von der neuen Methode getParentProfileInstance() zurückgegeben wird. Außerdem können Profilinhaber den Bildschirm mit den Anmeldedaten für die geschäftliche Herausforderung mit den neuen Methoden setOrganizationColor() und setOrganizationName() anpassen.

Arbeitsprofil deaktivieren

Auf einem Gerät mit einem Arbeitsprofil können Nutzer den Arbeitsmodus wechseln. In diesem Fall wird der verwaltete Nutzer vorübergehend heruntergefahren. Dadurch werden Arbeitsprofil-Apps, die Hintergrundsynchronisierung und Benachrichtigungen deaktiviert. Dazu gehört auch die Anwendung des Profilinhabers. Wenn der Arbeitsmodus deaktiviert ist, zeigt das System ein dauerhaftes Statussymbol an, um den Nutzer daran zu erinnern, dass keine geschäftlichen Apps gestartet werden können. Der Launcher zeigt an, dass geschäftliche Apps und Widgets nicht zugänglich sind.

Durchgehend aktives VPN

Geräte- und Profilinhaber können dafür sorgen, dass geschäftliche Apps immer über ein bestimmtes VPN verbunden werden. Das System startet dieses VPN automatisch nach dem Hochfahren des Geräts.

Die neuen DevicePolicyManager-Methoden sind setAlwaysOnVpnPackage() und getAlwaysOnVpnPackage().

Da VPN-Dienste ohne Anwendungsinteraktion direkt vom System gebunden werden können, müssen VPN-Clients neue Einstiegspunkte für das durchgehend aktive VPN verarbeiten. Wie zuvor werden Dienste dem System durch einen Intent-Filter angezeigt, der die Aktion android.net.VpnService abgleicht.

Nutzer können Always on VPN-Clients, die VPNService-Methoden implementieren, auch manuell über Einstellungen> Dreipunkt-Menü> VPN festlegen. Die Option „Durchgehend aktives VPN“ in den Einstellungen ist nur verfügbar, wenn der VPN-Client auf API-Level 24 ausgerichtet ist.

Benutzerdefinierte Bereitstellung

Eine Anwendung kann die Bereitstellungsabläufe für Profilinhaber und Geräteinhaber mit Unternehmensfarben und -logos anpassen. Mit DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR wird die Ablauffarbe angepasst. DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI passt den Ablauf mit einem Firmenlogo an.

Verbesserte Bedienungshilfen

Unter Android 7.0 finden Sie jetzt direkt auf dem Begrüßungsbildschirm die Seheinstellungen für die Einrichtung neuer Geräte. Dadurch können Nutzer Bedienungshilfen wie Vergrößerungsgesten, Schriftgröße, Anzeigegröße und TalkBack auf ihren Geräten viel einfacher finden und konfigurieren.

Da diese Bedienungshilfen stärker auffallen, ist es wahrscheinlicher, dass Nutzer Ihre App mit aktivierten Bedienungshilfen ausprobieren. Testen Sie Ihre Apps frühzeitig, wenn diese Einstellungen aktiviert sind. Sie können sie unter „Einstellungen“ > „Bedienungshilfen“ aktivieren.

In Android 7.0 können Bedienungshilfen jetzt Nutzern mit motorischen Einschränkungen helfen, den Bildschirm zu berühren. Mit der neuen API können Sie Dienste mit Funktionen wie Gesichtserkennung, Blickverfolgung, Punktscan usw. erstellen, um die Anforderungen dieser Nutzer zu erfüllen.

Weitere Informationen finden Sie in der Referenzdokumentation zu GestureDescription.

Direct Boot

Durch den direkten Start können die Gerätestartzeiten verkürzt werden und die Funktionalität registrierter Apps ist auch nach einem unerwarteten Neustart eingeschränkt. Wenn beispielsweise ein verschlüsseltes Gerät neu gestartet wird, während der Nutzer schläft, kann der Nutzer jetzt wie gewohnt von registrierten Alarmen, Nachrichten und eingehenden Anrufen benachrichtigt werden. Das bedeutet auch, dass Bedienungshilfen sofort nach einem Neustart verfügbar sein können.

Direct Boot nutzt die dateibasierte Verschlüsselung in Android 7.0, um detaillierte Verschlüsselungsrichtlinien für System- und Anwendungsdaten zu ermöglichen. Das System verwendet einen geräteverschlüsselten Speicher für ausgewählte Systemdaten und explizit registrierte App-Daten. Standardmäßig wird für alle anderen Systemdaten, Nutzerdaten, Apps und App-Daten ein Speicher verwendet, der mit Anmeldedaten verschlüsselt ist.

Beim Start wird das System in einem eingeschränkten Modus gestartet, in dem es nur Zugriff auf die mit dem Gerät verschlüsselten Daten und keinen allgemeinen Zugriff auf Apps oder Daten gibt. Wenn Sie Komponenten haben, die in diesem Modus ausgeführt werden sollen, können Sie sie registrieren, indem Sie im Manifest ein Flag festlegen. Nach dem Neustart aktiviert das System registrierte Komponenten durch Senden des Intents LOCKED_BOOT_COMPLETED. Das System sorgt dafür, dass registrierte, mit Geräten verschlüsselte App-Daten vor dem Entsperren verfügbar sind. Alle anderen Daten sind erst verfügbar, wenn der Nutzer seine Anmeldedaten für den Sperrbildschirm zum Entschlüsseln bestätigt hat.

Weitere Informationen finden Sie unter Direct Boot.

Schlüsselattestierung

Mit Android 7.0 wird die Schlüsselattestierung eingeführt. Mit diesem neuen Sicherheitstool kannst du dafür sorgen, dass die von deiner App verwendeten vertraulichen Daten durch die Schlüsselpaare, die im hardwaregestützten Schlüsselspeicher eines Geräts gespeichert sind, ordnungsgemäß geschützt sind. Durch die Verwendung dieses Tools gewinnen Sie zusätzliche Gewissheit, dass Ihre Anwendung mit Schlüsseln interagiert, die sich auf sicherer Hardware befinden, selbst wenn das Gerät, auf dem die Anwendung ausgeführt wird, gerootet ist. Wenn Sie in Ihren Anwendungen Schlüssel aus dem hardwaregestützten Schlüsselspeicher verwenden, sollten Sie dieses Tool verwenden, insbesondere wenn Sie die Schlüssel verwenden, um vertrauliche Informationen innerhalb Ihrer Anwendung zu überprüfen.

Mit der Schlüsselattestierung können Sie prüfen, ob ein RSA- oder EC-Schlüsselpaar erstellt und im hardwaregestützten Schlüsselspeicher eines Geräts in der vertrauenswürdigen Ausführungsumgebung (Trusted Execution Environment, TEE) des Geräts erstellt wurde. Mit dem Tool können Sie auch einen externen Dienst wie den Backend-Server Ihrer App verwenden, um die Verwendung und Gültigkeit des Schlüsselpaars zu ermitteln und sorgfältig zu prüfen. Diese Funktionen bieten eine zusätzliche Sicherheitsebene zum Schutz des Schlüsselpaars, selbst wenn jemand das Gerät gerootet oder die Sicherheit der auf dem Gerät ausgeführten Android-Plattform beeinträchtigt.

Hinweis: Nur wenige Geräte mit Android 7.0 unterstützen die Schlüsselattestierung auf Hardwareebene. Alle anderen Geräte mit Android 7.0 verwenden stattdessen die Schlüsselattestierung auf Softwareebene. Bevor du die Eigenschaften der hardwaregestützten Schlüssel eines Geräts in einer Umgebung auf Produktionsebene prüfst, solltest du dafür sorgen, dass das Gerät die Schlüsselattestierung auf Hardwareebene unterstützt. Prüfen Sie dazu, ob die Attestierungszertifikatkette ein Root-Zertifikat enthält, das vom Google-Attestierungsstammschlüssel signiert ist, und ob das Element attestationSecurityLevel in der Datenstruktur Schlüsselbeschreibung auf die Sicherheitsstufe „TrustedEnvironment“ festgelegt ist.

Weitere Informationen finden Sie in der Entwicklerdokumentation für die Schlüsselattestierung.

Konfiguration der Netzwerksicherheit

In Android 7.0 können Apps das Verhalten ihrer sicheren Verbindungen (HTTPS, TLS) sicher und ohne Codeänderung anpassen. Dazu verwenden sie die deklarative Network Security Config, anstatt herkömmliche fehleranfällige programmatische APIs (z. B. X509TrustManager) zu verwenden.

Unterstützte Funktionen:

  • Benutzerdefinierte Trust-Anchors. Ermöglicht einer Anwendung, anzupassen, welche Zertifizierungsstellen (Certificate Authorities, CAs) für ihre sicheren Verbindungen vertrauenswürdig sind. Dazu gehört beispielsweise das Vertrauen in bestimmten selbst signierten Zertifikaten oder einer eingeschränkten Gruppe öffentlicher Zertifizierungsstellen.
  • Überschreibungen, die nur zur Fehlerbehebung dienen: Ermöglicht einem Anwendungsentwickler, sichere Verbindungen in seiner Anwendung sicher zu debuggen, ohne das Risiko für die installierte Basis zu erhöhen.
  • Datenverkehr mit Klartext deaktivieren: Ermöglicht es einer Anwendung, sich vor der versehentlichen Verwendung von Klartext-Traffic zu schützen.
  • Zertifikat anpinnen: Ein erweitertes Feature, mit dem eine Anwendung einschränken kann, welche Serverschlüssel für sichere Verbindungen vertrauenswürdig sind.

Weitere Informationen finden Sie unter Konfiguration der Netzwerksicherheit.

Standardmäßige vertrauenswürdige Zertifizierungsstelle

Standardmäßig vertrauen Apps, die auf Android 7.0 ausgerichtet sind, nur den vom System bereitgestellten Zertifikaten und nicht mehr von Nutzern hinzugefügten Zertifizierungsstellen (Certificate Authorities, CAs). Apps, die auf Android 7.0 (API-Level 24) ausgerichtet sind und von Nutzern hinzugefügten Zertifizierungsstellen vertrauen möchten, sollten mithilfe der Netzwerksicherheitskonfiguration angeben, wie Nutzer-Zertifizierungsstellen vertrauenswürdig sind.

APK-Signaturschema v2

Mit Android 7.0 wird das APK-Signaturschema v2 eingeführt. Dieses neue App-Signaturschema ermöglicht eine schnellere App-Installation und mehr Schutz vor nicht autorisierten Änderungen an APK-Dateien. Standardmäßig signieren Android Studio 2.2 und das Android-Plug-in für Gradle 2.2 Ihre App sowohl mit dem APK-Signaturschema v2 als auch mit dem herkömmlichen Signaturschema, das die JAR-Signatur verwendet.

Obwohl wir empfehlen, das APK-Signaturschema v2 für deine App anzuwenden, ist dieses neue Schema nicht obligatorisch. Wenn Ihre App bei Verwendung des APK-Signaturschema v2 nicht richtig erstellt wird, können Sie das neue Schema deaktivieren. Durch das Deaktivieren wird Ihre App von Android Studio 2.2 und dem Android-Plug-in für Gradle 2.2 nur mit dem herkömmlichen Signaturschema signiert. Wenn Sie nur mit dem herkömmlichen Schema signieren möchten, öffnen Sie die Datei build.gradle auf Modulebene und fügen Sie Ihrer Release-Signaturkonfiguration die Zeile v2SigningEnabled false hinzu:

  android {
    ...
    defaultConfig { ... }
    signingConfigs {
      release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
        v2SigningEnabled false
      }
    }
  }

Achtung : Wenn Sie Ihre App mit dem APK-Signaturschema v2 signieren und weitere Änderungen an der App vornehmen, wird die Signatur der App ungültig. Verwende deshalb Tools wie zipalign, bevor du deine App mit dem APK-Signaturschema v2 signierst und nicht danach.

Weitere Informationen findest du in den Android Studio-Dokumenten, in denen beschrieben wird, wie du eine App in Android Studio signierst und die Build-Datei zum Signieren von Apps mit dem Android-Plug-in für Gradle konfigurierst.

Bereichszugriff auf Verzeichnis

In Android 7.0 können Apps neue APIs verwenden, um Zugriff auf bestimmte externe Speicherverzeichnisse anzufordern, einschließlich Verzeichnisse auf Wechseldatenträgern wie SD-Karten. Die neuen APIs vereinfachen den Zugriff Ihrer Anwendung auf standardmäßige externe Speicherverzeichnisse wie das Verzeichnis Pictures erheblich. Anwendungen wie Foto-Apps können diese APIs anstelle von READ_EXTERNAL_STORAGE verwenden, das Zugriff auf alle Speicherverzeichnisse gewährt, oder auf das Storage Access Framework, wodurch der Nutzer zum Verzeichnis wechselt.

Außerdem vereinfachen die neuen APIs die Schritte, mit denen Nutzer Zugriff auf externen Speicher auf Ihre Anwendung gewähren. Wenn Sie die neuen APIs verwenden, verwendet das System eine einfache Benutzeroberfläche für Berechtigungen, aus der klar hervorgeht, auf welches Verzeichnis die Anwendung Zugriff anfordert.

Weitere Informationen finden Sie in der Entwicklerdokumentation zum Zugriff auf einen auf einen Bereich beschränkten Verzeichniszugriff.

Assistent für Tastenkombinationen

In Android 7.0 kann der Nutzer Meta + / drücken, um einen Bildschirm mit Tastenkombinationen aufzurufen, auf dem alle Tastenkombinationen angezeigt werden, die sowohl im System als auch in der aktiven App verfügbar sind. Sofern vorhanden, werden die Verknüpfungen automatisch aus dem App-Menü abgerufen. Sie können auch eigene, abgestimmte Tastenkombinationen für den Bildschirm angeben. Überschreiben Sie dazu die Methode onProvideKeyboardShortcuts().

Hinweis: Die Meta-Taste ist nicht auf allen Tastaturen vorhanden. Auf einer Macintosh-Tastatur ist es die Befehlstaste, auf der Windows-Tastatur die Windows-Taste und auf der Pixel C- und der ChromeOS-Tastatur die Suchtaste.

Rufe requestShowKeyboardShortcuts() über die entsprechende Aktivität auf, um die Hilfsfunktion für Tastenkombinationen von einer beliebigen Stelle in der App aus aufzurufen.

Benutzerdefinierte Pointer API

Mit Android 7.0 wird die Custom Pointer API eingeführt, mit der Sie das Aussehen, die Sichtbarkeit und das Verhalten des Zeigers anpassen können. Diese Funktion ist besonders nützlich, wenn ein Nutzer eine Maus oder ein Touchpad verwendet, um mit UI-Objekten zu interagieren. Für den Standardzeiger wird ein Standardsymbol verwendet. Diese API umfasst auch erweiterte Funktionen wie das Ändern der Darstellung des Zeigersymbols basierend auf bestimmten Maus- oder Touchpad-Bewegungen.

Wenn Sie ein Zeigersymbol festlegen möchten, überschreiben Sie die Methode onResolvePointerIcon() der Klasse View. Bei dieser Methode wird ein PointerIcon-Objekt verwendet, um das Symbol für ein bestimmtes Bewegungsereignis zu zeichnen.

Sustained Performance API

Die Leistung kann bei Apps mit langer Laufzeit stark schwanken, da das System System-on-Chip-Engines drosselt, wenn Gerätekomponenten ihre Temperaturgrenzen erreichen. Diese Schwankungen sind ein bewegliches Ziel für App-Entwickler, die leistungsstarke Apps mit langer Laufzeit erstellen.

Um diesen Einschränkungen entgegenzuwirken, unterstützt Android 7.0 den Modus für kontinuierliche Leistung, sodass OEMs Hinweise zu Leistungsmerkmalen der Geräteleistung für Apps mit langer Laufzeit geben können. App-Entwickler können diese Hinweise verwenden, um Apps für eine vorhersehbare, konsistente Geräteleistung über einen längeren Zeitraum zu optimieren.

App-Entwickler können diese neue API in Android 7.0 nur auf Nexus 6P-Geräten ausprobieren. Wenn Sie diese Funktion verwenden möchten, legen Sie das Flag für das Fenster für kontinuierliche Leistung für das Fenster fest, das Sie im Modus für kontinuierliche Leistung ausführen möchten. Legen Sie dieses Flag mit der Methode Window.setSustainedPerformanceMode() fest. Das System deaktiviert diesen Modus automatisch, wenn das Fenster nicht mehr im Fokus ist.

VR-Unterstützung

Android 7.0 bietet Plattformunterstützung und Optimierungen für einen neuen VR-Modus, mit dem Entwickler hochwertige mobile VR-Erlebnisse für Nutzer erstellen können. Es wurden eine Reihe von Leistungsverbesserungen vorgenommen, darunter der Zugriff auf einen exklusiven CPU-Kern für VR-Apps. In Ihren Apps können Sie intelligentes Head-Tracking und Stereo-Benachrichtigungen für VR nutzen. Der wichtigste Vorteil von Android 7.0 ist eine Grafik mit sehr niedriger Latenz. Umfassende Informationen zum Erstellen von VR-Apps für Android 7.0 findest du unter Google VR SDK for Android.

Unter Android 7.0 können Entwickler von Druckdiensten jetzt zusätzliche Informationen zu einzelnen Druckern und Druckaufträgen aufrufen.

Beim Auflisten einzelner Drucker kann ein Druckdienst jetzt auf zwei Arten Symbole für einzelne Drucker festlegen:

Außerdem können Sie durch Aufrufen von setInfoIntent() eine Aktivität pro Drucker angeben, um zusätzliche Informationen anzuzeigen.

Sie können den Fortschritt und Status von Druckaufträgen in der Druckauftragsbenachrichtigung durch Aufrufen von setProgress() bzw. setStatus() angeben.

Frame Metrics-API

Mit der Frame Metrics API kann eine App ihre UI-Renderingleistung überwachen. Die API bietet diese Funktion, indem sie eine Streaming-Pub/Sub API zur Verfügung stellt, um Frame-Timing-Informationen für das aktuelle Fenster der Anwendung zu übertragen. Die zurückgegebenen Daten entsprechen denen von adb shell dumpsys gfxinfo framestats, sind aber nicht auf die letzten 120 Frames beschränkt.

Sie können die Frame Metrics API verwenden, um die UI-Leistung auf Interaktionsebene in der Produktion ohne USB-Verbindung zu messen. Diese API ermöglicht die Erhebung von Daten mit einem viel höheren Detaillierungsgrad als adb shell dumpsys gfxinfo. Dieser höhere Detaillierungsgrad ist möglich, da das System Daten für bestimmte Interaktionen in der Anwendung erfassen kann. Das System muss weder eine globale Zusammenfassung der Leistung der gesamten Anwendung erfassen noch einen globalen Status löschen. Mit dieser Funktion können Sie Leistungsdaten erfassen und Regressionen der UI-Leistung für reale Anwendungsfälle innerhalb einer Anwendung erkennen.

Implementieren Sie zum Überwachen eines Fensters die Callback-Methode OnFrameMetricsAvailableListener.onFrameMetricsAvailable() und registrieren Sie sie in diesem Fenster.

Die API stellt ein FrameMetrics-Objekt mit Zeitdaten bereit, die das Rendering-Subsystem für verschiedene Meilensteine in einem Frame-Lebenszyklus meldet. Folgende Messwerte werden unterstützt: UNKNOWN_DELAY_DURATION, INPUT_HANDLING_DURATION, ANIMATION_DURATION, LAYOUT_MEASURE_DURATION, DRAW_DURATION, SYNC_DURATION, COMMAND_ISSUE_DURATION, SWAP_BUFFERS_DURATION, TOTAL_DURATION und FIRST_DRAW_FRAME.

Virtuelle Dateien

In früheren Android-Versionen konnte deine App das Storage Access Framework verwenden, damit Nutzer Dateien aus ihren Cloud Storage-Konten wie Google Drive auswählen konnten. Es gab jedoch keine Möglichkeit, Dateien darzustellen, die keine direkte Bytecodedarstellung hatten. Jede Datei war zur Bereitstellung eines Eingabestreams erforderlich.

Unter Android 7.0 wird das Konzept der virtuellen Dateien dem Storage Access Framework hinzugefügt. Mit dem Feature für virtuelle Dateien kann der DocumentsProvider Dokument-URIs zurückgeben, die mit einem ACTION_VIEW-Intent auch dann verwendet werden können, wenn sie keine direkte Bytecode-Darstellung haben. Unter Android 7.0 kannst du auch alternative Formate für Nutzerdateien bereitstellen, virtuell oder anderweitig.

Weitere Informationen zum Öffnen virtueller Dateien finden Sie im Leitfaden zu Storage Access Frameworks unter Virtuelle Dateien öffnen.