Funktionen und APIs – Übersicht

Android 15 bietet neue Funktionen und APIs für Entwickler. In den folgenden Abschnitten werden diese Funktionen zusammengefasst, um Ihnen den Einstieg in die zugehörigen APIs zu erleichtern.

Eine detaillierte Liste der neuen, geänderten und entfernten APIs finden Sie im Bericht zu API-Unterschieden. Ausführliche Informationen zu den neuen APIs finden Sie in der Android API-Referenz. Die neuen APIs sind hervorgehoben dargestellt. Wenn du wissen möchtest, in welchen Bereichen sich Plattformänderungen auf deine Apps auswirken können, solltest du dir die Verhaltensänderungen von Android 15, die sich auf Apps auswirken, wenn sie auf Android 15 ausgerichtet sind, und die Verhaltensänderungen, die alle Apps unabhängig von targetSdkVersion betreffen, ansehen.

Kamera und Medien

Android 15 enthält eine Vielzahl von Funktionen, die die Kamera- und Mediennutzung verbessern und mit denen du Tools und Hardware nutzen kannst, um Creator dabei zu unterstützen, ihre Vision auf Android zu verwirklichen.

Weitere Informationen zu den neuesten Funktionen und Entwicklerlösungen für Android-Medien und -Kameras finden Sie im Vortrag Modern Android-Medien- und -Kameraerlebnisse auf der Google I/O.

Booster für wenig Licht

Mit Android 15 wird die Optimierung bei wenig Licht eingeführt, ein neuer Modus für die automatische Belichtung, der sowohl für Kamera 2 als auch für die Kameraerweiterung für den Nachtmodus verfügbar ist. Mit der Funktion „Verstärkung bei wenig Licht“ wird die Belichtung des Vorschaustreams bei schwachem Licht angepasst. Dies unterscheidet sich von der Art und Weise, wie mit der Nachtmodus-Kameraerweiterung Standbilder erstellt werden, da der Nachtmodus eine Reihe von Fotos zu einem einzigen, verbesserten Bild kombiniert. Der Nachtmodus eignet sich zwar sehr gut zum Erstellen von Standbildern, er kann jedoch keinen fortlaufenden Stream von Frames erzeugen, die Optimierung bei wenig Licht hingegen schon. Dadurch ermöglicht die Optimierung bei wenig Licht neue Kamerafunktionen, z. B.:

  • Sie bieten eine optimierte Bildvorschau, damit Nutzer Bilder bei schlechten Lichtverhältnissen besser einordnen können.
  • QR-Codes bei wenig Licht scannen

Wenn Sie „Optimierung bei wenig Licht“ aktivieren, wird sie bei wenig Licht automatisch aktiviert und bei mehr Licht wieder ausgeschaltet.

Apps können bei schlechten Lichtverhältnissen aus dem Vorschaustream aufzeichnen, um ein helleres Video zu speichern.

Weitere Informationen finden Sie unter Verstärkung bei wenig Licht.

Kamerasteuerung in der App

Unter Android 15 wird eine neue Erweiterung hinzugefügt, mit der Sie die Kamerahardware und ihre Algorithmen auf unterstützten Geräten besser steuern können:

  • Erweiterte Anpassungen der Blitzstärke ermöglichen eine präzise Steuerung der Blitzintensität im SINGLE- und TORCH-Modus während der Aufnahme.

HDR-Tonsteuerung

Unter Android 15 wird ein HDR-Toleranzbereich ausgewählt, der den zugrunde liegenden Gerätefunktionen und der Bittiefe des Panels entspricht. Bei Seiten mit vielen SDR-Inhalten, z. B. einer Messaging-App mit einer einzelnen HDR-Miniaturansicht, kann sich dieses Verhalten negativ auf die wahrgenommene Helligkeit der SDR-Inhalte auswirken. Unter Android 15 kannst du den HDR-Toleranzbereich mit setDesiredHdrHeadroom steuern, um ein ausgewogenes Verhältnis zwischen SDR- und HDR-Inhalten zu erreichen.

Die Helligkeit von SDR-UI-Elementen auf dem linken Bildschirm ist gleichmäßiger als die Helligkeit auf dem rechten Bildschirm. Dadurch werden mögliche Toleranzprobleme simuliert, wenn HDR- und SDR-Inhalte gemischt sind. Durch Anpassung des HDR-Toleranzraums erreichst du ein besseres Gleichgewicht zwischen SDR- und HDR-Inhalten.

Lautstärkeregelung

Mit Android 15 werden nun CTA-2075-Lautheitsstandard, der Ihnen hilft, Vermeiden Sie Inkonsistenzen bei der Audiolautstärke und stellen Sie sicher, dass Nutzer sich nicht ständig darum kümmern müssen, Lautstärke beim Wechsel zwischen Inhalten anpassen. Das System nutzt bekannte die Eigenschaften der Ausgabegeräte (Kopfhörer und Lautsprecher) sowie Lautheitsmetadaten in AAC-Audioinhalten, um die Lautstärke Lautstärke und Kompressionsstufen des dynamischen Bereichs.

Um diese Funktion zu aktivieren, müssen Lautheitsmetadaten verfügbar sein in und die Plattformfunktion in Ihrer App aktivieren. Dazu müssen Sie instanziieren Sie ein LoudnessCodecController-Objekt, indem Sie die Factory-Methode create mit der Audio-Datei Sitzungs-ID aus dem verknüpften AudioTrack dies werden automatisch Audio-Updates angewendet. Sie können eine OnLoudnessCodecUpdateListener zum Ändern oder Filtern lautheitsparameter, bevor sie auf den MediaCodec

// Media contains metadata of type MPEG_4 OR MPEG_D
val mediaCodec = 
val audioTrack = AudioTrack.Builder()
                                .setSessionId(sessionId)
                                .build()
...
// Create new loudness controller that applies the parameters to the MediaCodec
try {
   val lcController = LoudnessCodecController.create(mSessionId)
   // Starts applying audio updates for each added MediaCodec
}

AndroidX media3 ExoPlayer wird ebenfalls für die Verwendung der LoudnessCodecController APIs für eine nahtlose App-Integration

Virtuelle MIDI 2.0-Geräte

Android 13 unterstützt jetzt die Verbindung mit MIDI 2.0-Geräten über USB, die über Universal MIDI Packets (UMP) kommunizieren. Android 15 dehnt die UMP-Unterstützung auf virtuelle MIDI-Apps aus. So können Kompositions-Apps Synthesizer-Apps als virtuelles MIDI 2.0-Gerät steuern, genau wie mit einem USB MIDI 2.0-Gerät.

Effizientere AV1-Software-Decodierung

Logo: dav1d

dav1d, der beliebte AV1-Softwaredecoder von VideoLAN, ist jetzt für Android-Geräte verfügbar, die keine AV1-Decodierung in Hardware unterstützen. dav1d ist bis zu 3-mal leistungsfähiger als der alte AV1-Softwaredecoder, sodass mehr Nutzer HD AV1 wiedergeben können, einschließlich einiger Geräte der unteren und mittleren Preisklasse.

Vorerst muss Ihre Anwendung die Verwendung von dav1d aktivieren, indem Sie sie mit dem Namen "c2.android.av1-dav1d.decoder" aufrufen. „dav1d“ wird bei einem nachfolgenden Update zum standardmäßigen AV1-Software-Decoder gemacht. Diese Unterstützung ist standardisiert und auf Android 11-Geräte zurückportiert, die Google Play-Systemupdates erhalten.

Produktivität und Tools für Entwickler

Wir arbeiten zwar vor allem daran, die Produktivitätszentren für Tools wie Android Studio, Jetpack Compose und die Android Jetpack-Bibliotheken zu optimieren, aber wir suchen immer nach Möglichkeiten in der Plattform, damit Sie Ihre Vision leichter verwirklichen können.

Updates zu OpenJDK 17

Unter Android 15 werden die Kernbibliotheken von Android fortlaufend aktualisiert, damit sie den Funktionen der neuesten OpenJDK-LTS-Releases entsprechen.

Die folgenden wichtigen Funktionen und Verbesserungen wurden eingeführt:

Diese APIs werden auf über einer Milliarde Geräten mit Android 12 (API-Level 31) und höher über Google Play-Systemupdates aktualisiert, damit du die neuesten Programmierfunktionen nutzen kannst.

Verbesserungen beim PDF

Android 15 enthält wesentliche Verbesserungen an den PdfRenderer APIs. Apps können erweiterte Funktionen wie das Rendern von passwortgeschützten Dateien, Anmerkungen, Formularbearbeitung, Suche und Auswahl mit Kopie enthalten. Linearisierte PDF-Optimierungen werden unterstützt, um die lokale PDF-Anzeige zu beschleunigen und die Ressourcennutzung zu reduzieren.

Die neuesten Updates beim PDF-Rendering umfassen Funktionen wie die Suche in eingebetteten PDF-Dateien.

PdfRenderer wurde in ein Modul verschoben, das unabhängig vom Plattform-Release mithilfe von Google Play-Systemupdates aktualisiert werden kann. Wir unterstützen diese Änderungen wieder auf Android 11 (API-Level 30) und erstellen eine kompatible Version der API-Oberfläche vor Android 15 namens PdfRendererPreV.

Wir schätzen Ihr Feedback zu den Verbesserungen, die wir an der PdfRenderer-API-Oberfläche vorgenommen haben, und planen, die Integration dieser APIs in Ihre App mit einer zukünftigen Android Jetpack-Bibliothek noch weiter zu vereinfachen.

Verfeinerungen des automatischen Sprachwechsels

Unter Android 14 wurde die mehrsprachige Spracherkennung auf dem Gerät mit automatischem Wechsel zwischen Sprachen hinzugefügt. Dies kann jedoch dazu führen, dass Wörter ausgelassen werden, insbesondere wenn Sprachen mit weniger Pausen zwischen den beiden Äußerungen wechseln. Android 15 bietet zusätzliche Steuerelemente, mit denen Apps diesen Wechsel auf ihren Anwendungsfall abstimmen können. EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS beschränkt den automatischen Wechsel bis zum Beginn der Audiositzung, während EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES den Sprachwechsel nach einer bestimmten Anzahl von Wechsel deaktiviert. Diese Optionen sind besonders nützlich, wenn Sie davon ausgehen, dass während der Sitzung eine einzelne Sprache gesprochen wird, die automatisch erkannt werden sollte.

Verbesserte OpenType Variable Font API

Android 15 verbessert die Nutzerfreundlichkeit der OpenType-Variablenschrift. Sie können jetzt eine FontFamily-Instanz aus einer Variablenschrift zu erstellen, ohne mit der buildVariableFamily API gewichten. Der Text-Renderer überschreibt Wert der wght-Achse, der dem angezeigten Text entspricht.

Mit der neuen API wird der Code zum Erstellen eines Typeface vereinfacht. erheblich:

Kotlin

val newTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build()

Java

Typeface newTypeface = Typeface.CustomFallbackBuilder(
            new FontFamily.Builder(
                new Font.Builder(assets, "RobotoFlex.ttf").build())
                    .buildVariableFamily())
    .build();

Bisher war viel mehr Code erforderlich, um dieselbe Typeface zu erstellen:

Kotlin

val oldTypeface = Typeface.CustomFallbackBuilder(
            FontFamily.Builder(
                Font.Builder(assets, "RobotoFlex.ttf")
                    .setFontVariationSettings("'wght' 400")
                    .setWeight(400)
                    .build())
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 100")
                        .setWeight(100)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 200")
                        .setWeight(200)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 300")
                        .setWeight(300)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 500")
                        .setWeight(500)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 600")
                        .setWeight(600)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 700")
                        .setWeight(700)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 800")
                        .setWeight(800)
                        .build()
                )
                .addFont(
                    Font.Builder(assets, "RobotoFlex.ttf")
                        .setFontVariationSettings("'wght' 900")
                        .setWeight(900)
                        .build()
                ).build()
        ).build()

Java

Typeface oldTypeface = new Typeface.CustomFallbackBuilder(
    new FontFamily.Builder(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 400")
            .setWeight(400)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 100")
            .setWeight(100)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 200")
            .setWeight(200)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 300")
            .setWeight(300)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 500")
            .setWeight(500)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 600")
            .setWeight(600)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 700")
            .setWeight(700)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 800")
            .setWeight(800)
            .build()
    )
    .addFont(
        new Font.Builder(assets, "RobotoFlex.ttf")
            .setFontVariationSettings("'wght' 900")
            .setWeight(900)
            .build()
    )
    .build()
).build();

Hier ein Beispiel dafür, wie ein Typeface mit der alten und neuen API erstellt wurde Renderings:

Beispiel dafür, wie sich das Schriftbild-Rendering bei neuen und alten Schriftbildern unterscheidet
APIs

In diesem Beispiel hat der mit der alten API erstellte Typeface nicht die für die Schriftstärke 350, 450, 550 und 650 Font-Instanzen, sodass der Renderer auf die nächste Gewichtung zurückgreift. Also in In diesem Fall wird 300 statt 350, 400 statt 450 und so weiter. Im Gegensatz dazu erstellt die mit den neuen APIs erstellte Typeface dynamisch eine Font-Instanz für eine bestimmte Gewichtung, sodass genaue Gewichtungen für 350, 450, 550 und 650 an.

Detaillierte Steuerelemente für Zeilenumbrüche

Ab Android 15 werden ein TextView und die zugrunde liegende Mit dem Zeilenumbruch kann der gegebene Teil des Textes in derselben Zeile beibehalten werden, Lesbarkeit. Sie können diese Anpassungen für Zeilenumbrüche nutzen, indem Sie das Tag <nobreak> in Stringressourcen oder createNoBreakSpan Ebenso können Sie Wörter aus mit dem Tag <nohyphen> oder createNoHyphenationSpan

Die folgende Stringressource enthält beispielsweise keinen Zeilenumbruch und wird mit dem Text „Pixel 8 Pro“ gerendert. an einer unerwünschten Stelle einbrechen:

<resources>
    <string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>

Im Gegensatz dazu enthält diese Stringressource das Tag <nobreak>, das den Wortgruppe „Pixel 8 Pro“. und verhindert Zeilenumbrüche:

<resources>
    <string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>

Der Unterschied beim Rendern dieser Strings ist in den folgenden Bilder:

Layout für eine Textzeile mit dem Text „Pixel 8 Pro“. wird nicht mit einem <nobreak>-Tag umschlossen.
Layout für dieselbe Textzeile mit dem Text „Pixel 8 Pro“. wird mit einem <nobreak>-Tag umschlossen.

App-Archivierung

Android und Google Play haben letztes Jahr die Unterstützung der App-Archivierung angekündigt. Damit können Nutzer Speicherplatz freigeben, indem sie selten verwendete Apps, die mit Android App Bundle bei Google Play veröffentlicht wurden, teilweise vom Gerät entfernen. Android 15 unterstützt jetzt das Archivieren und Dearchivieren von Apps auf Betriebssystemebene, was die Implementierung für alle App-Shops vereinfacht.

Apps mit der Berechtigung REQUEST_DELETE_PACKAGES können die Methode PackageInstaller requestArchive aufrufen, um die Archivierung eines installierten App-Pakets anzufordern. Dadurch werden das APK und alle im Cache gespeicherten Dateien entfernt, aber die Nutzerdaten bleiben erhalten. Archivierte Apps werden über die LauncherApps APIs als anzeigbare Apps zurückgegeben. Nutzer sehen eine UI, die darauf hinweist, dass diese Apps archiviert wurden. Wenn ein Nutzer auf eine archivierte Anwendung tippt, erhält das zuständige Installationsprogramm eine Anfrage zum Wieder aktivieren und der Wiederherstellungsprozess kann mit dem ACTION_PACKAGE_ADDED-Broadcast überwacht werden.

Grafik

Android 15 bietet die neuesten Grafikverbesserungen, einschließlich ANGLE und Ergänzungen zum Canvas-Grafiksystem.

GPU-Zugriff von Android modernisieren

Logo: Vulkan

Die Android-Hardware hat sich seit den Anfängen stark weiterentwickelt, als das Kernbetriebssystem auf einer einzigen CPU ausgeführt wurde und auf GPUs über APIs basierend auf Pipelines mit fester Funktion zugegriffen wurde. Die Vulkan® Graphics API ist im NDK seit Android 7.0 (API-Level 24) mit einer Abstraktion auf niedrigerer Ebene verfügbar, die moderne GPU-Hardware besser widerspiegelt, besser skaliert werden kann, um mehrere CPU-Kerne zu unterstützen, und einen geringeren CPU-Treiberaufwand bietet, was zu einer verbesserten App-Leistung führt. Vulkan wird von allen modernen Spiel-Engines unterstützt.

Vulkan ist die von Android bevorzugte Schnittstelle zur GPU. Daher enthält Android 15 ANGLE als optionale Ebene zum Ausführen von OpenGL® ES auf Vulkan. Durch den Wechsel zu ANGLE wird die Android OpenGL-Implementierung standardisiert, um die Kompatibilität und in einigen Fällen auch die Leistung zu verbessern. Sie können die Stabilität und Leistung Ihrer OpenGL ES-App mit ANGLE testen. Aktivieren Sie dazu unter Android 15 die Entwickleroption unter Einstellungen -> System -> Entwickleroptionen -> Experimentell: ANGLE aktivieren.

Die Roadmap „Android ANGLE“ auf Vulkan

Roadmap der bevorstehenden Änderungen bei den Android GPU APIs

Im Rahmen der Optimierung unseres GPU-Stacks werden wir in Zukunft ANGLE als GL-Systemtreiber auf weiteren neuen Geräten veröffentlichen. Wir gehen davon aus, dass OpenGL/ES künftig nur über ANGLE verfügbar sein wird. Die Unterstützung von OpenGL ES auf allen Geräten wird jedoch fortgesetzt.

Empfohlene nächste Schritte

Wählen Sie in den Entwickleroptionen den ANGLE-Treiber für OpenGL ES aus und testen Sie Ihre App. Bei neuen Projekten empfehlen wir Ihnen dringend, Vulkan für C/C++ zu verwenden.

Verbesserungen für Canvas

Mit Android 15 wird die Modernisierung des Canvas-Grafiksystems von Android mit neuen Funktionen fortgesetzt:

  • Matrix44 bietet eine 4x4-Matrix zum Transformieren von Koordinaten, die für die Bearbeitung des Canvas in 3D verwendet werden sollten.
  • clipShader überschneidet den aktuellen Clip mit dem angegebenen Shader. clipOutShader legt den Clip auf die Differenz des aktuellen Clips und des Shaders fest. Jeder Shader behandelt den Shader als Alpha-Maske. Dadurch können komplexe Formen effizient gezeichnet werden.

Leistung und Akku

Android hilft dir weiterhin dabei, die Leistung und Qualität deiner Apps zu verbessern. Mit Android 15 werden neue APIs eingeführt, mit denen Aufgaben in Ihrer App effizienter ausgeführt, die App-Leistung optimiert und Informationen zu Ihren Apps gesammelt werden können.

Best Practices für den Akkuverbrauch, die Fehlerbehebung bei Netzwerk- und Stromverbrauch und Details dazu, wie wir die Akkueffizienz von Hintergrundaufgaben unter Android 15 und neueren Versionen von Android verbessern, finden Sie auf der Google I/O im Artikel Akkueffizienz der Hintergrundarbeit unter Android verbessern.

ApplicationStartInfo-API

In früheren Android-Versionen war das Start-up von Apps eher ein Rätsel. Es war schwierig, in Ihrer App festzustellen, ob sie aus einem kalten, warmen oder heißen Zustand gestartet wurde. Es war auch schwierig zu wissen, wie lange Ihre App in den verschiedenen Startphasen verbracht hat: Verzweigen des Prozesses, Aufrufen von onCreate, Zeichnen des ersten Frames usw. Als die Application-Klasse instanziiert wurde, konnten Sie nicht wissen, ob die Anwendung über einen Broadcast, einen Contentanbieter, einen Job, eine Sicherung, den Boot-Abschluss, einen Alarm oder eine Activity gestartet wurde.

Die ApplicationStartInfo API unter Android 15 bietet all das und noch mehr. Sie können sogar eigene Zeitstempel in den Ablauf einfügen, um Zeitdaten an einem Ort zu erfassen. Zusätzlich zum Erfassen von Messwerten können Sie ApplicationStartInfo verwenden, um den Anwendungsstart direkt zu optimieren. So können Sie beispielsweise die kostspielige Instanziierung von UI-bezogenen Bibliotheken in Ihrer Application-Klasse beim Start Ihrer Anwendung aufgrund einer Übertragung vermeiden.

Detaillierte Informationen zur App-Größe

Seit Android 8.0 (API-Level 26) enthält Android die StorageStats.getAppBytes API, die die installierte Größe einer App als eine einzelne Bytezahl zusammenfasst. Dies ist die Summe aus der APK-Größe, der Größe der aus dem APK extrahierten Dateien und der auf dem Gerät generierten Dateien, z. B. kompilierter Vorab-Code (AOT). Diese Zahl ist nicht sehr aufschlussreich für die Speichernutzung Ihrer App.

Unter Android 15 wird die StorageStats.getAppBytesByDataType([type]) API hinzugefügt, mit der du Informationen darüber erhalten kannst, wie deine App den gesamten Speicherplatz nutzt, einschließlich APK-Dateiaufteilungen, AOT-Code und beschleunigtem Code, DEX-Metadaten, Bibliotheken und geführten Profilen.

Von Anwendungen verwaltete Profilerstellung

Android 15 enthält die brandneue ProfilingManager-Klasse, mit der Sie Profilinformationen direkt in Ihrer App erfassen können. Wir planen, dies mit einer Android Jetpack API zu vereinen, die das Erstellen von Profilanfragen vereinfacht. Die Core API ermöglicht jedoch das Erfassen von Heap-Dumps, Heap-Profilen, Stack-Sampling und mehr. Sie liefert einen Callback für Ihre Anwendung mit einem bereitgestellten Tag, mit dem die Ausgabedatei identifiziert wird. Diese wird an das Dateiverzeichnis Ihrer Anwendung gesendet. Die API begrenzt die Ratenbegrenzung, um die Auswirkungen auf die Leistung zu minimieren.

SQLite-Datenbankverbesserungen

Android 15 引入了新的 SQLite API,可提供底层 SQLite 引擎的高级功能,这些功能旨在解决应用中可能出现的特定性能问题。

开发者应查阅 SQLite 性能最佳实践,以充分利用其 SQLite 数据库,尤其是在使用大型数据库或运行对延迟敏感的查询时。

  • 只读延迟事务:发出只读事务(不包括写入语句)时,使用 beginTransactionReadOnly()beginTransactionWithListenerReadOnly(SQLiteTransactionListener) 发出只读 DEFERRED 事务。此类事务可以相互并发运行,如果数据库处于 WAL 模式,则它们可以与 IMMEDIATEEXCLUSIVE 事务并发运行。
  • 行数和 ID:新增了 API,用于检索已更改的行的计数或最后插入的行 ID,而无需发出额外的查询。getLastChangedRowCount() 返回当前事务中的最新 SQL 语句插入、更新或删除的行数,而 getTotalChangedRowCount() 返回当前连接的相关计数。getLastInsertRowId() 返回要在当前连接上插入的最后一行的 rowid
  • 原始语句:发出原始 SQlite 语句,绕过便捷封装容器以及它们可能产生的任何其他处理开销。

Updates für das Android Dynamic Performance Framework

Für Android 15 investieren wir weiterhin in das Android Dynamic Performance Framework (ADPF). Diese APIs ermöglichen eine direktere Interaktion von Spielen und leistungsintensiven Apps mit den Energie- und Wärmesystemen von Android-Geräten. Auf unterstützten Geräten werden mit Android 15 neue ADPF-Funktionen hinzugefügt:

  • Ein Energiesparmodus für Hinweissitzungen, der angibt, dass die zugehörigen Threads Energiesparen gegenüber Leistung vorziehen sollten. Dies eignet sich hervorragend für Hintergrundarbeitslasten mit langer Ausführungszeit.
  • Sowohl GPU- als auch CPU-Arbeitsdauer können in Hinweissitzungen gemeldet werden. Dadurch kann das System CPU- und GPU-Frequenzen gemeinsam anpassen, um die Arbeitslastanforderungen bestmöglich zu erfüllen.
  • Grenzwerte für den thermischen Toleranzbereich, um den Status einer Drosselung anhand der Vorhersage des Toleranzbereichs zu interpretieren.

Weitere Informationen zur Verwendung von ADPF in Ihren Apps und Spielen finden Sie in der Dokumentation.

Datenschutz

Android 15 enthält eine Vielzahl von Funktionen, mit denen App-Entwickler die Privatsphäre der Nutzer schützen können.

Bildschirmaufzeichnungserkennung

Android 15 unterstützt Apps, um zu erkennen, dass sie aufgezeichnet werden. Ein Callback wird immer dann aufgerufen, wenn die Anwendung wechselt ob sie innerhalb einer Bildschirmaufzeichnung sichtbar oder unsichtbar sind. Eine App ist als sichtbar gelten, wenn Aktivitäten, die zur UID des Registrierungsprozesses gehören, aufgezeichnet wird. Wenn Ihre App einen vertraulichen Vorgang ausführt, kann den Nutzer über die Aufzeichnung informieren.

val mCallback = Consumer<Int> { state ->
  if (state == SCREEN_RECORDING_STATE_VISIBLE) {
    // We're being recorded
  } else {
    // We're not being recorded
  }
}

override fun onStart() {
   super.onStart()
   val initialState =
      windowManager.addScreenRecordingCallback(mainExecutor, mCallback)
   mCallback.accept(initialState)
}

override fun onStop() {
    super.onStop()
    windowManager.removeScreenRecordingCallback(mCallback)
}

Erweiterte IntentFilter-Funktionen

Android 15 unterstützt eine genauere Intent-Auflösung durch UriRelativeFilterGroup mit einer Reihe von UriRelativeFilter-Objekte, die einen Satz von Intent bilden die jeweils erfüllt werden müssen, einschließlich URL-Suchparameter, URL- Fragmenten und Blockier- oder Ausschlüsse.

Diese Regeln können in der XML-Datei AndroidManifest mit dem neuen <uri-relative-filter-group>-Tag, das optional einen android:allow. Diese Tags können <data>-Tags enthalten, für die vorhandene Daten verwendet werden Tag-Attribute sowie die neuen android:query und android:fragment Attribute.

Hier ein Beispiel für die Syntax AndroidManifest:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data android:scheme="http" />
  <data android:scheme="https" />
  <data android:domain="astore.com" />
  <uri-relative-filter-group>
    <data android:pathPrefix="/auth" />
    <data android:query="region=na" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:query="mobileoptout=true" />
  </uri-relative-filter-group>
  <uri-relative-filter-group android:allow="false">
    <data android:pathPrefix="/auth" />
    <data android:fragmentPrefix="faq" />
  </uri-relative-filter-group>
</intent-filter>

Vertrauliches Profil

<ph type="x-smartling-placeholder">
您可以通过解锁和锁定私密空间来显示或隐藏私密空间 敏感应用。

私密空间可让用户在设备上创建单独的空间 保护敏感应用免遭窥探, 身份验证。私密空间使用单独的用户个人资料。用户可以 选择为私密空间使用设备锁定或单独的锁定因素。

私密空间中的应用显示在启动器中的单独容器中,并且 不会显示在“最近用过”视图、通知、设置和其他应用中 在私密空间处于锁定状态时显示通知用户生成的内容(例如 媒体或文件),而账号会在私密空间和 主空间系统 Sharesheet照片选择器:用于授权应用访问内容

用户无法将现有应用及其数据移至私密空间。相反, 用户在私密空间中选择安装选项,以便使用 无论他们喜欢哪家应用商店私密空间中的应用会以下列身份安装: 来自主空间中任何应用的单独副本(同一应用的新副本)。

当用户锁定私密空间后,系统会停用相应个人资料。而配置文件 已停止,私密空间中的应用不再有效,无法执行 前台或后台 activity,包括显示通知。

我们建议您使用私密空间测试您的应用,以确保您的应用 按预期运行,尤其是当应用属于以下某种情况时 类别:

Zuletzt ausgewählte Nutzerauswahl für den Zugriff auf ausgewählte Fotos abfragen

Apps können jetzt nur die zuletzt ausgewählten Fotos hervorheben und Videos, wenn der teilweise Zugriff auf Medienberechtigungen gewährt wird. Dieses kann die User Experience für Apps verbessern, die häufig auf Fotos und Videos zugreifen. Um diese Funktion in deiner App zu verwenden, aktiviere die Argument QUERY_ARG_LATEST_SELECTION_ONLY beim Abfragen von MediaStore bis ContentResolver.

Kotlin

val externalContentUri = MediaStore.Files.getContentUri("external")

val mediaColumns = arrayOf(
   FileColumns._ID,
   FileColumns.DISPLAY_NAME,
   FileColumns.MIME_TYPE,
)

val queryArgs = bundleOf(
   // Return only items from the last selection (selected photos access)
   QUERY_ARG_LATEST_SELECTION_ONLY to true,
   // Sort returned items chronologically based on when they were added to the device's storage
   QUERY_ARG_SQL_SORT_ORDER to "${FileColumns.DATE_ADDED} DESC",
   QUERY_ARG_SQL_SELECTION to "${FileColumns.MEDIA_TYPE} = ? OR ${FileColumns.MEDIA_TYPE} = ?",
   QUERY_ARG_SQL_SELECTION_ARGS to arrayOf(
       FileColumns.MEDIA_TYPE_IMAGE.toString(),
       FileColumns.MEDIA_TYPE_VIDEO.toString()
   )
)

Java

Uri externalContentUri = MediaStore.Files.getContentUri("external");

String[] mediaColumns = {
    FileColumns._ID,
    FileColumns.DISPLAY_NAME,
    FileColumns.MIME_TYPE
};

Bundle queryArgs = new Bundle();
queryArgs.putBoolean(MediaStore.QUERY_ARG_LATEST_SELECTION_ONLY, true);
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SORT_ORDER, FileColumns.DATE_ADDED + " DESC");
queryArgs.putString(MediaStore.QUERY_ARG_SQL_SELECTION, FileColumns.MEDIA_TYPE + " = ? OR " + FileColumns.MEDIA_TYPE + " = ?");
queryArgs.putStringArray(MediaStore.QUERY_ARG_SQL_SELECTION_ARGS, new String[] {
    String.valueOf(FileColumns.MEDIA_TYPE_IMAGE),
    String.valueOf(FileColumns.MEDIA_TYPE_VIDEO)
});

Privacy Sandbox für Android

Android 15 enthält die neuesten Erweiterungen für Android-Anzeigendienste sowie die neueste Version der Privacy Sandbox für Android. Diese Ergänzung ist Teil unserer Bemühungen, neue Technologien zu entwickeln, die den Datenschutz für Nutzer verbessern und effektive, personalisierte Anzeigen für mobile Apps ermöglichen. Auf unserer Privacy Sandbox-Seite finden Sie weitere Informationen zur Privacy Sandbox für Entwicklervorschauen und Betaprogrammen für Android, um Ihnen den Einstieg zu erleichtern.

Health Connect

Android 15 enthält die neuesten Erweiterungen rund um Health Connect by Android, eine sichere und zentrale Plattform zum Verwalten und Freigeben von von Apps erhobenen Gesundheits- und Fitnessdaten. Dieses Update unterstützt neue Datentypen für Fitness, Ernährung, Hauttemperatur, Trainingspläne und mehr.

Die Erfassung der Hauttemperatur ermöglicht es Nutzern, genauere Temperaturdaten von einem Wearable oder einem anderen Tracking-Gerät zu speichern und zu teilen.

Trainingspläne sind strukturierte Trainingspläne, die einem Nutzer helfen, seine Fitnessziele zu erreichen. Die Unterstützung für Trainingspläne umfasst eine Vielzahl von Abschluss- und Leistungszielen:

Weitere Informationen zu den neuesten Updates für Health Connect in Android findest du im Vortrag Building anpassbare Experiences with Android Health von der Google I/O.

Teilfreigabe des Bildschirms

Unter Android 15 wird die Teilfreigabe des Bildschirms unterstützt. Nutzer können also statt des gesamten Gerätebildschirms nur ein App-Fenster teilen oder aufzeichnen. Diese Funktion, die erstmals in Android 14 QPR2 aktiviert wurde, enthält MediaProjection-Callbacks, mit denen deine App die Teilbildschirmfreigabe anpassen kann. Hinweis: Für Apps, die auf Android 14 (API-Level 34) oder höher ausgerichtet sind, ist jetzt für jede MediaProjection-Erfassungssitzung eine Nutzereinwilligung erforderlich.

Nutzererfahrung und System-UI

Android 15 bietet App-Entwicklern und Nutzern mehr Kontrolle und Flexibilität bei der Konfiguration von Geräten, die ihren Anforderungen entsprechen.

Weitere Informationen dazu, wie Sie mithilfe der neuesten Verbesserungen in Android 15 die Nutzererfahrung Ihrer App verbessern können, finden Sie im Vortrag von der Google I/O im Artikel zur Verbesserung der Nutzererfahrung in Android 15.

Umfassendere Widget-Vorschauen mit der Generated Previews API

Vor Android 15 bestand die einzige Möglichkeit, Vorschauen für die Widget-Auswahl bereitzustellen, Eine statische Bild- oder Layoutressource Diese Vorschauen unterscheiden sich oft stark vom Aussehen des Widgets abhebt, wenn es auf der Wohnung platziert wird. Bildschirm. Außerdem können mit Jetpack Glance keine statischen Ressourcen erstellt werden. Die Live-Anzeige mussten Entwickler Screenshots des Widgets erstellen oder ein XML-Layout erstellen, um eine Vorschau des Widgets.

Android 15 unterstützt jetzt generierte Vorschauen. Das App-Widget Anbieter können stattdessen RemoteViews generieren, um sie als Vorschau für die Auswahl zu verwenden. einer statischen Ressource.

<ph type="x-smartling-placeholder">
</ph>
Apps können Remote-Ansichten für die Widget-Auswahl bereitstellen, damit sie Aktualisieren Sie den Inhalt in der Auswahl so, dass er repräsentativer für das ist, was die Nutzenden

Push-API

Apps können generierte Vorschauen über eine Push-API bereitstellen. Apps bieten und erhalten keine explizite Anfrage vom Host gesendet, um eine Vorschau anzuzeigen. Vorschauen werden in AppWidgetService beibehalten, die Organisatoren diese bei Bedarf anfordern können. Im folgenden Beispiel wird ein XML-Widget geladen Layout-Ressource und legt sie als Vorschau fest:

AppWidgetManager.getInstance(appContext).setWidgetPreview(
   ComponentName(
       appContext,
       SociaLiteAppWidgetReceiver::class.java
   ),
   AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
   RemoteViews("com.example", R.layout.widget_preview)
)

Der erwartete Ablauf sieht so aus:

  1. Der Widget-Anbieter ruft jederzeit setWidgetPreview auf. Das angegebene Vorschauen werden zusammen mit anderen Anbieterinformationen in AppWidgetService gespeichert.
  2. setWidgetPreview benachrichtigt Hosts über eine aktualisierte Vorschau über das AppWidgetHost.onProvidersChanged-Rückruf. Daraufhin reagiert das Widget alle Anbieterinformationen neu lädt.
  3. Bei der Anzeige einer Widget-Vorschau prüft der Host AppWidgetProviderInfo.generatedPreviewCategories. Wenn das ausgewählte Element Kategorie verfügbar ist, ruft AppWidgetManager.getWidgetPreview an gibt die gespeicherte Vorschau für diesen Anbieter zurück.

Wann Sie setWidgetPreview anrufen sollten

Da es keinen Callback für die Vorschau gibt, können Apps wenn sie ausgeführt werden. Häufigkeit der Aktualisierung der Vorschau hängt vom Anwendungsfall des Widgets ab.

In der folgenden Liste werden die beiden Hauptkategorien von Anwendungsfällen für Vorschauen beschrieben:

  • Anbieter, die in ihrer Widget-Vorschau echte Daten anzeigen, z. B. personalisierte oder aktuelle Informationen. Diese Anbieter können die Vorschau einrichten, sobald der Nutzer angemeldet sind oder die Erstkonfiguration in der App vorgenommen hat. Danach werden sie können eine regelmäßige Aufgabe einrichten, um die Vorschauen im gewünschten Rhythmus zu aktualisieren. Beispiele für diese Art von Widget sind Fotos, Kalender, Wetter oder Nachrichten. Widget.
  • Anbieter, die statische Informationen in Vorschauen oder Schnellaktionen-Widgets anzeigen die keine Daten anzeigen. Diese Anbieter können die Vorschau einmal einrichten, App-Starts. Beispiele für diese Art von Widget sind Widget „Aktionen“ oder das Widget für Chrome-Verknüpfungen.

Einige Anbieter zeigen möglicherweise statische Vorschauen in der Hub-Modus-Auswahl an, aber echte zur Auswahl des Startbildschirms. Diese Anbieter müssen sich an die Richtlinien halten, für beide Anwendungsfälle, um eine Vorschau festzulegen.

Die Funktion „Bild im Bild“

Android 15 führt Änderungen bei Bild im Bild (BiB) ein, die eine einheitliche weichere Übergänge beim Wechsel in den BiB-Modus. Dies ist hilfreich für Apps mit UI-Elementen, die über der Hauptbenutzeroberfläche eingeblendet werden und in BiB einfügen

Entwickler verwenden den onPictureInPictureModeChanged-Callback, um die Logik zu definieren die die Sichtbarkeit der eingeblendeten UI-Elemente ein-/ausschaltet. Dieser Callback ist wird ausgelöst, wenn die BiB-Animation zum Ein- oder Ausschalten abgeschlossen ist. Beginnt in In Android 15 enthält die Klasse PictureInPictureUiState einen neuen Status.

Bei diesem neuen UI-Status gilt für Apps, die auf Android 15 ausgerichtet sind, Activity#onPictureInPictureUiStateChanged-Callback wird aufgerufen mit isTransitioningToPip(), sobald die BiB-Animation beginnt. Es gibt viele UI-Elemente, die für die App im BiB-Modus nicht relevant sind, Beispielansichten oder Layouts, die Informationen wie Vorschläge, bevorstehende Videos, Bewertungen und Titel. Wenn die App in den BiB-Modus wechselt, verwende die onPictureInPictureUiStateChanged-Callback zum Ausblenden dieser UI-Elemente. Wenn der Parameter wenn die App vom BiB-Fenster in den Vollbildmodus wechselt, verwenden Sie onPictureInPictureModeChanged-Callback zum Einblenden dieser Elemente, wie in die folgenden Beispiele:

override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
        if (pipState.isTransitioningToPip()) {
          // Hide UI elements
        }
    }
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
        if (isInPictureInPictureMode) {
          // Unhide UI elements
        }
    }

Diese Ein/Aus-Schaltfläche für die schnelle Sichtbarkeit irrelevanter UI-Elemente (für ein BiB-Fenster) hilft sorgen für eine flüssigere und flimmernde BiB-Animation.

Verbesserte „Bitte nicht stören“-Regeln

Mit AutomaticZenRule können Apps die Regeln für die Geräuschunterdrückung (Bitte nicht stören) anpassen und entscheiden, wann sie aktiviert oder deaktiviert werden sollen. Unter Android 15 werden diese Regeln erheblich verbessert, um die Nutzererfahrung zu verbessern. Die folgenden Verbesserungen wurden vorgenommen:

  • Typen werden zu AutomaticZenRule hinzugefügt. Dadurch kann das System einige Regeln gesondert behandeln.
  • AutomaticZenRule wird ein Symbol hinzugefügt, damit die Modi besser erkennbar sind.
  • Einen triggerDescription-String zu AutomaticZenRule hinzufügen, der die Bedingungen beschreibt, unter denen die Regel für den Nutzer aktiviert werden soll.
  • ZenDeviceEffects wurde zu AutomaticZenRule hinzugefügt. Damit können Regeln wie die Graustufenanzeige, den Nachtmodus oder das Dimmen des Hintergrunds ausgelöst werden.

VibrationEffect für Benachrichtigungskanäle festlegen

Android 15 unterstützt das Festlegen von starken Vibrationen für eingehende Benachrichtigungen nach Kanal mit NotificationChannel.setVibrationEffect. So können Nutzer zwischen verschiedenen Arten von Benachrichtigungen unterscheiden, ohne auf ihr Gerät sehen zu müssen.

Große Bildschirme und Formfaktoren

Android 15 bietet Ihren Apps die Möglichkeit, die Formfaktoren von Android, einschließlich großer Displays, klappbarer und faltbarer Geräte, optimal zu nutzen.

Verbessertes Multitasking auf großen Bildschirmen

Mit Android 15 ist Multitasking auf Geräten mit großen Bildschirmen noch einfacher. Nutzer können beispielsweise ihre bevorzugten Kombinationen für Apps mit geteiltem Bildschirm speichern, um schnell darauf zuzugreifen, und die Taskleiste auf dem Bildschirm anpinnen, um schnell zwischen Apps zu wechseln. Deshalb ist es wichtiger denn je, dass Ihre App anpassungsfähig ist.

Auf der Google I/O finden Sie hilfreiche Sitzungen zu den Themen Adaptive Android-Apps erstellen und UI mit der adaptiven Material 3-Bibliothek erstellen. In unserer Dokumentation finden Sie weitere Informationen zum Design für große Bildschirme.

Unterstützung für Coverdisplay

Deine App kann eine Eigenschaft deklarieren, die unter Android 15 verwendet wird, damit deine Application oder Activity auf kleinen Titelbildschirmen unterstützter umklappbarer Geräte angezeigt werden können. Diese Bildschirme sind zu klein, um als kompatible Ziele für die Ausführung von Android-Apps betrachtet zu werden, aber Ihre App kann diese unterstützen, sodass Ihre App an mehr Orten verfügbar ist.

Konnektivität

Android 15 aktualisiert die Plattform, damit Ihre App auf die neuesten Fortschritte in den Bereichen Kommunikation und Funktechnologien zugreifen kann.

Satellitensupport

Android 15 erweitert die Plattformunterstützung für Satellitenverbindungen weiter und enthält einige UI-Elemente, um eine einheitliche Nutzererfahrung in der gesamten Landschaft der Satellitenkonnektivität zu gewährleisten.

Apps können ServiceState.isUsingNonTerrestrialNetwork() verwenden, um zu erkennen, wann ein Gerät mit einem Satelliten verbunden ist. So wissen sie besser, warum vollständige Netzwerkdienste möglicherweise nicht verfügbar sind. Darüber hinaus bietet Android 15 Unterstützung für SMS- und MMS-Apps sowie vorinstallierte RCS-Apps, um über die Satellitenverbindung Nachrichten zu senden und zu empfangen.

Eine Benachrichtigung wird angezeigt, wenn das Gerät eine Verbindung zu einem Satelliten hergestellt hat.

Reibungslosere NFC-Funktionen

Android 15 arbeitet daran, das kontaktlose Bezahlen nahtloser und zuverlässiger zu gestalten und gleichzeitig das robuste NFC-System von Android zu unterstützen. Auf unterstützten Geräten können Apps den NfcAdapter anfordern, in den Beobachtungsmodus zu wechseln. In diesem Modus werden die PollingFrame-Objekte des NFC-Dienstes der App zur Verarbeitung gesendet, wobei das Gerät zwar abhört, aber nicht auf die NFC-Lesegeräte reagiert. Die PollingFrame-Objekte können zur Authentifizierung vor der ersten Kommunikation mit dem NFC-Lesegerät verwendet werden, was in vielen Fällen eine Transaktion mit nur einem Fingertipp ermöglicht.

Darüber hinaus können Anwendungen jetzt auf unterstützten Geräten einen Filter registrieren, sodass sie über die Aktivität der Abfrageschleife benachrichtigt werden können. Dies ermöglicht einen reibungslosen Betrieb mit mehreren NFC-fähigen Anwendungen.

Wallet-Rolle

Mit Android 15 wird eine neue Wallet-Rolle eingeführt, die eine engere Einbindung in die bevorzugte Wallet-App des Nutzers ermöglicht. Diese Rolle ersetzt die NFC-Standardeinstellung für kontaktloses Bezahlen. Nutzer können den Wallet-Rolleninhaber unter Einstellungen > Apps > Standard-Apps verwalten.

Die Rolle „Wallet“ wird beim Routing von NFC-Tippaktionen für AIDs verwendet, die in der Zahlungskategorie registriert sind. Eingaben werden immer an den Wallet-Rolleninhaber gesendet, es sei denn, eine andere App, die für dieselbe AID registriert ist, wird im Vordergrund ausgeführt.

Diese Rolle wird auch verwendet, um zu bestimmen, wo die Kachel für den Schnellzugriff für Wallet bei Aktivierung platziert werden soll. Wenn die Rolle auf „None“ festgelegt ist, ist die QuickAccess-Kachel nicht verfügbar und NFC-Tippaktionen für Zahlungskategorien werden nur an die Vordergrund-App gesendet.

Sicherheit

Mit Android 15 kannst du die Sicherheit deiner App verbessern, die Daten deiner App schützen und Nutzern mehr Transparenz und Kontrolle über ihre Daten bieten. Im Vortrag von Google I/O unter Nutzersicherheit auf Android-Geräten schützen erfahren Sie mehr darüber, wie wir die Nutzersicherheit verbessern und Ihre App vor neuen Bedrohungen schützen.

Anmeldedaten-Manager in Autofill einbinden

Starting with Android 15, developers can link specific views like username or password fields with Credential Manager requests, making it easier to provide a tailored user experience during the sign-in process. When the user focuses on one of these views, a corresponding request is sent to Credential Manager. The resulting credentials are aggregated across providers and displayed in autofill fallback UIs, such as inline suggestions or drop-down suggestions. The Jetpack androidx.credentials library is the preferred endpoint for developers to use and will soon be available to further enhance this feature in Android 15 and higher.

Registrierung und Anmeldung durch einmaliges Tippen in biometrische Aufforderungen einbinden

Credential Manager integrates biometric prompts into the credential creation and sign-in processes, eliminating the need for providers to manage biometric prompts. As a result, credential providers only need to focus on the results of the create and get flows, augmented with the biometric flow result. This simplified process creates a more efficient and streamlined credential creation and retrieval process.

Schlüsselverwaltung für Ende-zu-Ende-Verschlüsselung

Wir führen E2eeContactKeysManager in Android 15 ein. Damit wird die Ende-zu-Ende-Verschlüsselung (E2EE) in Android-Apps durch die Bereitstellung einer API auf Betriebssystemebene für das Speichern kryptografischer öffentlicher Schlüssel ermöglicht.

E2eeContactKeysManager ist für die Einbindung in die Anwendung für Plattformkontakte konzipiert und bietet Nutzern eine zentrale Möglichkeit, die öffentlichen Schlüssel ihrer Kontakte zu verwalten und zu prüfen.

Berechtigungsprüfungen für Inhalts-URIs

Mit Android 15 werden eine Reihe neuer APIs eingeführt, die Berechtigungsprüfungen für Inhalts-URIs durchführen:

Bedienungshilfen

Android 15 bietet neue Funktionen, die die Barrierefreiheit für Nutzer verbessern.

Bessere Brailleschrift

Seit Android 15 unterstützt TalkBack nun Braillezeilen, die den HID-Standard sowohl über USB als auch über sicheres Bluetooth verwenden.

Dieser Standard ähnelt dem für Mäuse und Tastaturen. Er wird Android im Laufe der Zeit dabei helfen, eine breitere Palette von Braillezeilen zu unterstützen.

Lokalisierung

Android 15 bietet zusätzliche Funktionen, die die Nutzerfreundlichkeit ergänzen, wenn ein Gerät in verschiedenen Sprachen verwendet wird.

Schriftart der Variablen CJK

Ab Android 15 ist NotoSansCJK die Schriftartdatei für Chinesisch, Japanisch und Koreanisch (CJK) als variable Schriftart. Variable Schriftarten eröffnen neue Möglichkeiten für die Creative-Typografie in CJK-Sprachen. Designschaffende können ein breiteres Spektrum an Stilen ausprobieren und optisch ansprechende Layouts erstellen, die zuvor schwer oder unmöglich zu erreichen waren.

Wie die Variablenschrift für die Sprachen Chinesisch, Japanisch und Koreanisch (CJK) mit unterschiedlichen Schriftbreiten angezeigt wird.

Zeichenblockierung

Ab Android 15 kann Text mithilfe von JUSTIFICATION_MODE_INTER_CHARACTER unter Verwendung von Buchstabenabstand im Blocksatz ausgerichtet werden. Die Inter-Wort-Begründung wurde erstmals in Android 8.0 (API-Ebene 26) eingeführt. Diese bietet ähnliche Möglichkeiten für Sprachen, die das Leerzeichen zur Segmentierung verwenden, z. B. Chinesisch, Japanisch und andere.

Layout für japanischen Text mit JUSTIFICATION_MODE_NONE.
Layout für englischen Text mit JUSTIFICATION_MODE_NONE.


Layout für japanischen Text mit JUSTIFICATION_MODE_INTER_WORD.
Layout für englischen Text mit JUSTIFICATION_MODE_INTER_WORD.


Layout für japanischen Text mit dem neuen JUSTIFICATION_MODE_INTER_CHARACTER.
Layout für englischen Text mit dem neuen JUSTIFICATION_MODE_INTER_CHARACTER.

Automatischen Zeilenumbruch konfigurieren

Ab Android 13 (API-Level 33) unterstützt Android nun auch textbasierte Zeilenumbrüche für Japanisch und Koreanisch. Wortgruppenbasierte Zeilenumbrüche verbessern zwar die Lesbarkeit kurzer Textzeilen, funktionieren aber nicht gut bei langen Textzeilen. In Android 15 können Apps jetzt mit der Option LINE_BREAK_WORD_STYLE_AUTO jetzt wortgruppenbasierte Zeilenumbrüche nur auf kurze Textzeilen anwenden. Mit dieser Option wird die beste Wortstiloption für den Text ausgewählt.

Für kurze Textzeilen werden sitzungsbasierte Zeilenumbrüche verwendet, die genauso wie LINE_BREAK_WORD_STYLE_PHRASE funktionieren, wie in der folgenden Abbildung gezeigt:

Bei kurzen Textzeilen werden in LINE_BREAK_WORD_STYLE_AUTO sitzungsspezifische Zeilenumbrüche angewendet, um die Lesbarkeit des Textes zu verbessern. Dies entspricht dem Anwenden von LINE_BREAK_WORD_STYLE_PHRASE.

Bei längeren Textzeilen verwendet LINE_BREAK_WORD_STYLE_AUTO einen Wortstil ohne Zeilenumbrüche und funktioniert genauso wie LINE_BREAK_WORD_STYLE_NONE, wie in der folgenden Abbildung gezeigt:

Bei langen Textzeilen wendet LINE_BREAK_WORD_STYLE_AUTO keinen Zeilenumbruchstil an, um die Lesbarkeit des Textes zu verbessern. Dies entspricht dem Anwenden von LINE_BREAK_WORD_STYLE_NONE.

Neue japanische Schriftart Hentaigana

In Android 15 ist eine neue Schriftartdatei für das alte japanische Hiragana (Hentaigana) standardmäßig gebündelt. Die einzigartigen Formen der Hentaigana-Figuren können den Kunstwerken oder dem Design ein besonderes Flair verleihen und gleichzeitig dazu beitragen, die genaue Übertragung und das Verständnis antiker japanischer Dokumente zu bewahren.

Zeichen- und Textstil für die japanische Schriftart Hentaigana.

VideoLAN cone Copyright (c) 1996-2010 VideoLAN. Dieses Logo oder eine modifizierte Version dürfen von jeder Person verwendet oder modifiziert werden, um auf das VideoLAN-Projekt oder ein vom VideoLAN-Team entwickeltes Produkt zu verweisen. Dies bedeutet jedoch nicht, dass dies vom Projekt unterstützt wird.

Vulkan und das Vulkan-Logo sind eingetragene Marken von Khronos Group Inc.

OpenGL ist eine eingetragene Marke und das OpenGL ES-Logo ist eine Marke von Hewlett Packard Enterprise, die mit Genehmigung von Khronos verwendet wird.