Ringkasan Fitur dan API

Android 15 memperkenalkan fitur dan API yang hebat untuk developer. Bagian berikut merangkum fitur-fitur ini untuk membantu Anda memulai API terkait.

Untuk melihat daftar mendetail tentang API yang ditambahkan, diubah, dan dihapus, baca laporan perbedaan API. Untuk mengetahui detail tentang API yang ditambahkan, buka referensi API Android — untuk Android 15, cari API yang ditambahkan di API level 35. Untuk mempelajari area tempat perubahan platform dapat memengaruhi aplikasi Anda, pastikan untuk memeriksa perubahan perilaku Android 15 untuk aplikasi yang menargetkan Android 15 dan untuk semua aplikasi.

Kamera dan media

Android 15 menyertakan berbagai fitur yang meningkatkan pengalaman kamera dan media serta memberi Anda akses ke alat dan hardware untuk mendukung kreator dalam mewujudkan visi mereka di Android.

Untuk mengetahui informasi selengkapnya tentang fitur terbaru dan solusi developer untuk media dan kamera Android, lihat presentasi Membuat pengalaman media dan kamera Android modern dari Google I/O.

Peningkatan Cahaya Redup

Android 15 引入了弱光增强功能,这是一种自动曝光模式,适用于 Camera 2夜间模式相机扩展。“弱光增强”功能可在光线昏暗的环境下调整预览画面的曝光度。这与夜间模式相机扩展程序创建静态图片的方式不同,因为夜间模式会将一系列照片组合起来,以创建一张经过增强的单张图片。虽然夜间模式非常适合拍摄静态图片,但无法创建连续的帧流,而“低光增强”功能可以。因此,弱光增强功能可启用相机功能,例如:

  • 提供增强型图片预览,以便用户更好地取景拍摄低光照片
  • 在光线不足的情况下扫描二维码

如果您启用“弱光增强”功能,该功能会在光线较弱时自动开启,在光线较强时关闭。

应用可以在光线昏暗的环境下录制预览画面,以保存经过亮度提升的视频。

如需了解详情,请参阅弱光增强

Kontrol kamera dalam aplikasi

Android 15 menambahkan ekstensi untuk lebih mengontrol hardware kamera dan algoritmanya di perangkat yang didukung:

  • Penyesuaian kekuatan flash lanjutan yang memungkinkan kontrol intensitas flash yang presisi dalam mode SINGLE dan TORCH saat mengambil gambar.

Kontrol headroom HDR

Android 15 会选择适合底层设备功能和面板位深的 HDR 余量。对于包含大量 SDR 内容的网页(例如显示单个 HDR 缩略图的消息应用),此行为最终可能会对 SDR 内容的感知亮度产生不利影响。在 Android 15 中,您可以使用 setDesiredHdrHeadroom 控制 HDR 余量,以便在 SDR 内容和 HDR 内容之间取得平衡。

左侧屏幕上的 SDR 界面元素的亮度似乎比右侧屏幕上的亮度更均匀,这模拟了混合 HDR 和 SDR 内容时可能出现的余量问题。通过调整 HDR 余量,您可以在 SDR 和 HDR 内容之间实现更好的平衡。

Kontrol volume

Android 15 memperkenalkan dukungan untuk standar kenyaringan CTA-2075 guna membantu Anda menghindari inkonsistensi kenyaringan audio dan memastikan pengguna tidak perlu terus-menerus menyesuaikan volume saat beralih antarkonten. Sistem ini memanfaatkan informasi karakteristik perangkat output (headphone dan speaker) beserta metadata kenyaringan yang tersedia dalam konten audio AAC untuk menyesuaikan secara cerdas tingkat kenyaringan audio dan rentang dinamis.

Untuk mengaktifkan fitur ini, pastikan metadata kenyaringan tersedia di konten AAC dan mengaktifkan fitur platform di aplikasi Anda. Untuk itu, Anda dapat Buat instance objek LoudnessCodecController dengan memanggil metode factory create-nya dengan audio ID sesi dari AudioTrack terkait; ingin otomatis mulai menerapkan pembaruan audio. Anda dapat meneruskan OnLoudnessCodecUpdateListener untuk mengubah atau memfilter parameter volume sebelum diterapkan di 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 juga akan diupdate untuk menggunakan LoudnessCodecController API untuk integrasi aplikasi yang lancar.

Perangkat MIDI 2.0 virtual

Android 13 添加了对使用 USB 连接 MIDI 2.0 设备的支持,这些设备使用通用 MIDI 数据包 (UMP) 进行通信。Android 15 将 UMP 支持扩展到了虚拟 MIDI 应用,使作曲应用能够像使用 USB MIDI 2.0 设备一样,将虚拟 MIDI 2.0 设备用作控制合成器应用的设备。

Decoding software AV1 yang lebih efisien

logo dav1d

dav1d, decoder software AV1 populer dari VideoLAN tersedia untuk perangkat Android yang tidak mendukung dekode AV1 dalam hardware. dav1d memiliki performa hingga 3x lebih baik daripada decoder software AV1 lama, sehingga memungkinkan pemutaran AV1 HD untuk lebih banyak pengguna, termasuk beberapa perangkat tingkat rendah dan menengah.

Aplikasi Anda harus memilih untuk menggunakan dav1d dengan memanggilnya berdasarkan nama "c2.android.av1-dav1d.decoder". dav1d akan dijadikan decoder software AV1 default dalam update berikutnya. Dukungan ini distandarisasi dan di-backport ke perangkat Android 11 yang menerima update sistem Google Play.

Alat dan produktivitas developer

Meskipun sebagian besar upaya kami untuk meningkatkan produktivitas Anda berfokus pada alat seperti Android Studio, Jetpack Compose, dan library Android Jetpack, kami selalu mencari cara di platform untuk membantu Anda lebih mudah mewujudkan visi Anda.

Update OpenJDK 17

Android 15 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致。

其中包含以下主要功能和改进:

这些 API 会通过 Google Play 系统更新在搭载 Android 12(API 级别 31)及更高版本的 10 亿多部设备上更新,以便您以最新的编程功能为目标平台。

Peningkatan PDF

Android 15 menyertakan peningkatan substansial pada PdfRenderer Google Cloud Platform. Aplikasi dapat menggabungkan fitur lanjutan seperti rendering file yang dilindungi sandi, anotasi, pengeditan formulir, penelusuran, dan pemilihan dengan salinan. PDF yang dilinierkan pengoptimalan didukung untuk mempercepat penayangan PDF lokal dan mengurangi penggunaan resource. Library Jetpack PDF menggunakan API ini untuk menyederhanakan penambahan PDF menampilkan aplikasi Anda.

Pembaruan terbaru pada rendering PDF mencakup fitur seperti menelusuri file PDF yang disematkan.

PdfRenderer telah dipindahkan ke modul yang dapat diupdate menggunakan update sistem Google Play, terlepas dari rilis platform, dan kami mendukung perubahan ini kembali ke Android 11 (API level 30) dengan membuat platform API versi pra-Android 15 yang kompatibel, yang disebut PdfRendererPreV.

Pengoptimalan pengalihan bahasa otomatis

Android 14 menambahkan pengenalan multibahasa di perangkat dalam audio dengan peralihan otomatis antarbahasa, tetapi hal ini dapat menyebabkan kata dihapus, terutama saat bahasa beralih dengan sedikit jeda di antara dua ucapan. Android 15 menambahkan kontrol tambahan untuk membantu aplikasi menyesuaikan pengalihan ini ke kasus penggunaannya. EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS membatasi pengalihan otomatis ke awal sesi audio, sedangkan EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES menonaktifkan pengalihan bahasa setelah sejumlah pengalihan yang ditentukan. Opsi ini sangat berguna jika Anda memperkirakan bahwa akan ada satu bahasa yang diucapkan selama sesi yang akan dideteksi secara otomatis.

OpenType Variable Font API yang ditingkatkan

Android 15 meningkatkan kegunaan font variabel OpenType. Anda sekarang dapat membuat instance FontFamily dari font variabel tanpa menentukan sumbu bobot dengan buildVariableFamily API. Perender teks mengganti nilai sumbu wght agar cocok dengan teks yang menampilkan.

Menggunakan API baru, hal ini menyederhanakan kode untuk membuat Typeface secara signifikan:

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();

Sebelumnya, untuk membuat Typeface yang sama, Anda memerlukan lebih banyak kode:

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();

Berikut ini contoh cara Typeface dibuat dengan API lama dan baru merender:

Contoh bagaimana rendering Typeface berbeda dengan penggunaan baru dan lama
API

Dalam contoh ini, Typeface yang dibuat dengan API lama tidak memiliki menciptakan bobot font yang akurat untuk 350, 450, 550 dan 650 Font, sehingga perender akan kembali ke bobot terdekat. Jadi ketika dalam hal ini, 300 dirender, bukan 350, 400 dirender, bukan 450, dan dan seterusnya. Sebaliknya, Typeface yang dibuat dengan API baru akan secara dinamis membuat instance Font untuk bobot tertentu, jadi bobot yang akurat dirender untuk 350, 450, 550, dan 650.

Kontrol pemisah baris terperinci

从 Android 15 开始,TextView 和底层行断开符可以将给定部分文本保留在同一行中,以提高可读性。您可以通过在字符串资源或 createNoBreakSpan 中使用 <nobreak> 标记来充分利用此换行符自定义功能。同样,您可以使用 <nohyphen> 标记或 createNoHyphenationSpan 来防止对字词进行分词。

例如,以下字符串资源不包含换行符,在呈现时,文本“Pixel 8 Pro”会在不合适的位置换行:

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

相比之下,此字符串资源包含 <nobreak> 标记,该标记会将字词“Pixel 8 Pro”换行,并防止换行:

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

以下图片展示了这些字符串呈现方式的差异:

一行文本的布局,其中显示短语“Pixel 8 Pro.”未使用 <nobreak> 标记换行。
使用 <nobreak> 标记封装“Pixel 8 Pro.”短语的同一行文本的布局。

Pengarsipan aplikasi

Android 和 Google Play 宣布支持最后的应用归档功能 年,这让用户可以通过移除部分内容来释放空间 通过 Android 应用发布的设备中不常用的应用 前往 Google Play 下载套装。Android 15 在操作系统级别支持应用归档和解压缩,让所有应用商店都能更轻松地实现归档和解压缩。

具有 REQUEST_DELETE_PACKAGES 权限的应用可以调用 PackageInstaller requestArchive 方法请求归档 已安装的应用软件包,这会移除 APK 和所有缓存的文件,但会保留 用户数据已归档的应用会通过 LauncherApps API 作为可显示的应用返回;用户会看到一个界面处理,以突出显示这些应用已归档。如果用户点按已归档的应用,负责安装的应用会收到解除归档请求,并且可以通过 ACTION_PACKAGE_ADDED 广播监控恢复过程。

Mengaktifkan mode 16 KB di perangkat menggunakan opsi developer

Alihkan opsi developer Booting dengan ukuran halaman 16 KB untuk mem-booting perangkat dalam mode 16 KB.

Mulai Android 15 QPR1, Anda dapat menggunakan opsi developer yang tersedia di perangkat tertentu untuk mem-booting perangkat dalam mode 16 KB dan melakukan pengujian di perangkat. Sebelum menggunakan opsi developer, buka Setelan -> Sistem -> Update software dan terapkan update yang tersedia.

Opsi developer ini tersedia di perangkat berikut:

  • Pixel 8 dan 8 Pro (dengan Android 15 QPR1 atau yang lebih baru)

    Peringatan: Karena masalah umum pada Android 15 QPR2 Beta 3, layar sentuh tidak berfungsi di perangkat Pixel 8 setelah menginstal Android 15 QPR2 Beta 3 dan mem-booting perangkat dalam mode 16 KB. Masalah ini tidak memengaruhi perangkat Pixel 8 Pro.

  • Pixel 8a (dengan Android 15 QPR1 atau yang lebih baru)

    Peringatan: Karena masalah umum pada Android 15 QPR2 Beta 3, layar sentuh tidak berfungsi di perangkat Pixel 8a setelah menginstal Android 15 QPR2 Beta 3 dan mem-booting perangkat dalam mode 16 KB.

  • Pixel 9, 9 Pro, dan 9 Pro XL (dengan Android 15 QPR2 Beta 2 atau yang lebih baru)

Grafik

Android 15 menghadirkan peningkatan grafis terbaru, termasuk ANGLE dan penambahan ke sistem grafis Kanvas.

Modernisasi akses GPU Android

Logo Vulkan

Hardware Android telah berkembang cukup banyak sejak awal ketika OS inti akan berjalan di satu CPU dan GPU diakses menggunakan API berdasarkan pipeline fungsi tetap. API grafis Vulkan® telah tersedia di NDK sejak Android 7.0 (API level 24) dengan abstraksi tingkat rendah yang lebih mencerminkan hardware GPU modern, diskalakan dengan lebih baik untuk mendukung beberapa core CPU, dan menawarkan overhead driver CPU yang lebih rendah — sehingga meningkatkan performa aplikasi. Vulkan didukung oleh semua game engine modern.

Vulkan adalah antarmuka pilihan Android untuk GPU. Oleh karena itu, Android 15 menyertakan ANGLE sebagai lapisan opsional untuk menjalankan OpenGL® ES di atas Vulkan. Beralih ke ANGLE akan menstandarkan implementasi OpenGL Android untuk meningkatkan kompatibilitas, dan, dalam beberapa kasus, meningkatkan performa. Anda dapat menguji stabilitas dan performa aplikasi OpenGL ES dengan ANGLE dengan mengaktifkan opsi developer di Setelan -> Sistem -> Opsi Developer -> Eksperimental: Aktifkan ANGLE di Android 15.

Roadmap Android ANGLE di Vulkan

Roadmap perubahan mendatang pada Android GPU API.

Sebagai bagian dari penyederhanaan stack GPU, ke depannya kami akan mengirimkan ANGLE sebagai driver sistem GL di lebih banyak perangkat baru, dengan ekspektasi di masa mendatang bahwa OpenGL/ES hanya akan tersedia melalui ANGLE. Meskipun demikian, kami berencana untuk melanjutkan dukungan untuk OpenGL ES di semua perangkat.

Rekomendasi langkah selanjutnya

Gunakan opsi developer untuk memilih driver ANGLE untuk OpenGL ES dan menguji aplikasi Anda. Untuk project baru, sebaiknya gunakan Vulkan untuk C/C++.

Peningkatan untuk Canvas

Android 15 melanjutkan modernisasi sistem grafis Canvas Android dengan kemampuan tambahan:

  • Matrix44 menyediakan matriks 4x4 untuk mengubah koordinat yang harus digunakan saat Anda ingin memanipulasi kanvas dalam 3D.
  • clipShader memotong klip saat ini dengan shader yang ditentukan, sedangkan clipOutShader menetapkan klip ke perbedaan klip saat ini dan shader, yang masing-masing memperlakukan shader sebagai mask alfa. Hal ini mendukung gambar bentuk kompleks secara efisien.

Performa dan baterai

Android terus berfokus untuk membantu Anda meningkatkan performa dan kualitas aplikasi. Android 15 memperkenalkan API yang membantu membuat tugas di aplikasi Anda lebih efisien untuk dijalankan, mengoptimalkan performa aplikasi, dan mengumpulkan insight tentang aplikasi Anda.

Untuk praktik terbaik yang hemat baterai, proses debug jaringan dan penggunaan daya, serta detail tentang cara kami meningkatkan efisiensi baterai pekerjaan latar belakang di Android 15 dan Android versi terbaru, lihat presentasi Meningkatkan efisiensi baterai pekerjaan latar belakang di Android dari Google I/O.

ApplicationStartInfo API

Pada versi Android sebelumnya, startup aplikasi agak misterius. Sulit untuk menentukan dalam aplikasi Anda apakah aplikasi dimulai dari status cold, warm, atau hot. Sulit juga untuk mengetahui berapa lama aplikasi Anda menghabiskan waktu selama berbagai fase peluncuran: melakukan fork pada proses, memanggil onCreate, menggambar frame pertama, dan lainnya. Saat class Application dibuat instance-nya, Anda tidak memiliki cara untuk mengetahui apakah aplikasi dimulai dari siaran, penyedia konten, tugas, pencadangan, booting selesai, alarm, atau Activity.

ApplicationStartInfo API di Android 15 menyediakan semua hal ini dan lainnya. Anda bahkan dapat memilih untuk menambahkan stempel waktu Anda sendiri ke dalam alur untuk membantu mengumpulkan data pengaturan waktu di satu tempat. Selain mengumpulkan metrik, Anda dapat menggunakan ApplicationStartInfo untuk membantu mengoptimalkan langsung startup aplikasi; misalnya, Anda dapat menghilangkan pembuatan instance library terkait UI yang mahal dalam class Application saat aplikasi dimulai karena siaran.

Informasi ukuran aplikasi mendetail

Sejak Android 8.0 (API level 26), Android telah menyertakan StorageStats.getAppBytes API yang merangkum ukuran aplikasi yang diinstal sebagai satu angka byte, yang merupakan jumlah ukuran APK, ukuran file yang diekstrak dari APK, dan file yang dihasilkan di perangkat seperti kode yang dikompilasi ahead-of-time (AOT). Jumlah ini tidak terlalu mendalam dalam hal cara aplikasi Anda menggunakan penyimpanan.

Android 15 menambahkan StorageStats.getAppBytesByDataType([type]) API, yang memungkinkan Anda mendapatkan insight tentang cara aplikasi menggunakan semua ruang tersebut, termasuk pemisahan file APK, AOT, dan kode terkait percepatan, metadata dex, library, dan profil yang dipandu.

Pembuatan profil yang dikelola aplikasi

Android 15 menyertakan class ProfilingManager, yang memungkinkan Anda mengumpulkan informasi pembuatan profil dari dalam aplikasi seperti heap dump, profil heap, sampling stack, dan lainnya. Fitur ini memberikan callback ke aplikasi Anda dengan tag yang disediakan untuk mengidentifikasi file output, yang dikirim ke direktori file aplikasi Anda. API melakukan pembatasan kapasitas untuk meminimalkan dampak performa.

Untuk menyederhanakan pembuatan permintaan pembuatan profil di aplikasi Anda, sebaiknya gunakan AndroidX API Profiling yang sesuai, yang tersedia di Core 1.15.0-rc01 atau yang lebih tinggi.

Peningkatan database SQLite

Android 15 引入了 SQLite API,这些 API 可公开底层 SQLite 引擎的高级功能,以解决可能在应用中出现的特定性能问题。将 SQLite 更新到版本 3.44.3

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

Update Android Dynamic Performance Framework

Android 15 melanjutkan investasi kami dalam Android Dynamic Performance Framework (ADPF), sekumpulan API yang memungkinkan game dan aplikasi yang membutuhkan performa tinggi untuk berinteraksi lebih langsung dengan sistem daya dan termal perangkat Android. Di perangkat yang didukung, Android 15 menambahkan kemampuan ADPF:

  • Mode hemat daya untuk sesi petunjuk guna menunjukkan bahwa thread terkait harus lebih memilih penghematan daya daripada performa, sangat cocok untuk beban kerja latar belakang yang berjalan lama.
  • Durasi kerja GPU dan CPU dapat dilaporkan dalam sesi petunjuk, sehingga sistem dapat menyesuaikan frekuensi CPU dan GPU secara bersamaan untuk memenuhi permintaan beban kerja dengan sebaik mungkin.
  • Batas headroom termal untuk menafsirkan kemungkinan status throttling termal berdasarkan prediksi headroom.

Untuk mempelajari lebih lanjut cara menggunakan ADPF di aplikasi dan game Anda, buka dokumentasi.

Privasi

Android 15 menyertakan berbagai fitur yang membantu developer aplikasi melindungi privasi pengguna.

Deteksi perekaman layar

Android 15 增加了对应用的支持,以检测 正在录制。每当应用转换时,系统都会调用回调 在屏幕录制内容中处于可见与隐藏状态之间。如果正在记录注册进程的 UID 拥有的 activity,则系统会将应用视为可见。这样一来,如果您的应用执行敏感操作,您就可以告知用户正在录制他们的操作。

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)
}

Kemampuan IntentFilter yang diperluas

Android 15 通过 UriRelativeFilterGroup 支持更精确的 Intent 解析,UriRelativeFilterGroup 包含一组 UriRelativeFilter 对象,这些对象构成一组必须满足的 Intent 匹配规则,包括网址查询参数、网址片段以及屏蔽或排除规则。

您可以在 AndroidManifest XML 文件中使用 <uri-relative-filter-group> 标记来定义这些规则,该标记可以包含 android:allow 标记。这些代码可以包含使用现有数据代码属性以及 android:queryandroid:fragment 属性的 <data> 代码。

下面是一个 AndroidManifest 语法示例:

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.BROWSABLE" />
  <category android:name="android.intent.category.DEFAULT" />
  <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>

Ruang privasi

Ruang pribadi dapat dibuka kuncinya dan dikunci untuk menampilkan atau menyembunyikan aplikasi sensitif di perangkat.

Ruang privasi memungkinkan pengguna membuat ruang terpisah di perangkat mereka tempat mereka dapat menyembunyikan aplikasi sensitif dari orang lain, dengan lapisan autentikasi tambahan. Ruang privasi menggunakan profil pengguna terpisah. Pengguna dapat memilih untuk menggunakan kunci perangkat atau faktor kunci terpisah untuk ruang pribadi.

Aplikasi di ruang pribadi muncul di penampung terpisah di peluncur, dan disembunyikan dari tampilan terbaru, notifikasi, setelan, dan dari aplikasi lain saat ruang pribadi dikunci. Konten yang dibuat dan didownload pengguna (seperti media atau file) dan akun dipisahkan antara ruang pribadi dan ruang utama. Sharesheet sistem dan pemilih foto dapat digunakan untuk memberi aplikasi akses ke konten di seluruh ruang saat ruang pribadi tidak dikunci.

Pengguna tidak dapat memindahkan aplikasi yang sudah ada dan datanya ke ruang pribadi. Sebagai gantinya, pengguna memilih opsi penginstalan di ruang pribadi untuk menginstal aplikasi menggunakan app store mana pun yang mereka inginkan. Aplikasi di ruang pribadi diinstal sebagai salinan terpisah dari aplikasi apa pun di ruang utama (salinan baru dari aplikasi yang sama).

Saat pengguna mengunci ruang pribadi, profil akan dihentikan. Saat profil dihentikan, aplikasi di ruang pribadi tidak lagi aktif dan tidak dapat melakukan aktivitas latar depan atau latar belakang, termasuk menampilkan notifikasi.

Sebaiknya uji aplikasi Anda dengan ruang pribadi untuk memastikan aplikasi berfungsi seperti yang diharapkan, terutama jika aplikasi Anda termasuk dalam salah satu kategori berikut:

Membuat kueri pilihan pengguna terbaru untuk Akses Foto yang Dipilih

现在,如果应用获得了部分访问权限,则只能突出显示最近选择的照片和视频。此功能可以改善频繁请求访问照片和视频的应用的用户体验。如需在应用中使用此功能,请在通过 ContentResolver 查询 MediaStore 时启用 QUERY_ARG_LATEST_SELECTION_ONLY 参数。

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 di Android

Android 15 menyertakan ekstensi Layanan Iklan Android terbaru, yang menggabungkan versi terbaru Privacy Sandbox di Android. Penambahan ini adalah bagian dari upaya kami untuk mengembangkan teknologi yang meningkatkan privasi pengguna dan memungkinkan pengalaman iklan yang dipersonalisasi secara efektif untuk aplikasi seluler. Halaman sandbox privasi kami memiliki informasi selengkapnya tentang Privacy Sandbox di program pratinjau developer dan beta Android untuk membantu Anda memulai.

Health Connect

Android 15 mengintegrasikan ekstensi terbaru di seputar Health Connect dari Android, platform terpusat dan aman untuk mengelola serta membagikan data kesehatan dan kebugaran yang dikumpulkan aplikasi. Update ini menambahkan dukungan untuk jenis data tambahan di seluruh kebugaran, gizi, suhu kulit, rencana latihan, dan lainnya.

Pelacakan suhu kulit memungkinkan pengguna menyimpan dan membagikan data suhu yang lebih akurat dari perangkat wearable atau perangkat pelacakan lainnya.

Rencana latihan adalah rencana olahraga terstruktur untuk membantu pengguna mencapai kebugaran mereka tujuan tersebut. Dukungan paket pelatihan mencakup berbagai penyelesaian dan performa tujuan:

Pelajari lebih lanjut update terbaru untuk Health Connect di Android dalam presentasi Membuat pengalaman yang dapat disesuaikan dengan Android Health dari Google I/O.

Berbagi layar aplikasi

Android 15 mendukung berbagi layar aplikasi sehingga pengguna dapat berbagi atau merekam jendela aplikasi, bukan seluruh layar perangkat. Fitur ini, yang pertama kali diaktifkan di Android 14 QPR2, mencakup callback MediaProjection yang memungkinkan aplikasi Anda menyesuaikan pengalaman berbagi layar aplikasi. Perhatikan bahwa untuk aplikasi yang menargetkan Android 14 (level API 34) atau yang lebih tinggi, izin pengguna diperlukan untuk setiap sesi pengambilan MediaProjection.

Pengalaman pengguna dan UI sistem

Android 15 memberi developer dan pengguna aplikasi kontrol dan fleksibilitas yang lebih besar untuk mengonfigurasi perangkat agar sesuai dengan kebutuhan mereka.

Untuk mempelajari lebih lanjut cara menggunakan peningkatan terbaru di Android 15 untuk meningkatkan pengalaman pengguna aplikasi Anda, lihat presentasi Meningkatkan pengalaman pengguna aplikasi Android dari Google I/O.

Pratinjau widget yang lebih kaya dengan Generated Previews API

Sebelum Android 15, satu-satunya cara untuk menyediakan pratinjau pemilih widget adalah dengan menentukan resource gambar atau tata letak statis. Pratinjau ini sering kali berbeda secara signifikan dengan tampilan widget sebenarnya saat ditempatkan di layar utama. Selain itu, resource statis tidak dapat dibuat dengan Jetpack Glance, sehingga developer Glance harus mengambil screenshot widget atau membuat tata letak XML untuk memiliki pratinjau widget.

Android 15 menambahkan dukungan untuk pratinjau yang dihasilkan. Artinya, widget aplikasi penyedia dapat membuat RemoteViews untuk digunakan sebagai pratinjau pemilih, resource statis.

Aplikasi dapat menyediakan Tampilan Jarak Jauh ke Pemilih Widget, sehingga dapat memperbarui konten di pemilih agar lebih mewakili apa yang akan dilihat pengguna.

Push API

Aplikasi dapat menyediakan pratinjau yang dihasilkan melalui API push. Aplikasi dapat memberikan melihat pratinjau di titik mana pun dalam siklus prosesnya, dan tidak menerima permintaan eksplisit dari {i>host<i} untuk menyediakan pratinjau. Pratinjau disimpan di AppWidgetService, dan host dapat memintanya secara on-demand. Contoh berikut memuat widget XML dan menyetelnya sebagai pratinjau:

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

Alur yang diharapkan adalah:

  1. Penyedia widget akan memanggil setWidgetPreview kapan saja. Pratinjau yang disediakan dipertahankan di AppWidgetService dengan info penyedia lainnya.
  2. setWidgetPreview memberi tahu host tentang pratinjau yang diperbarui melalui callback AppWidgetHost.onProvidersChanged. Sebagai respons, widget {i>host<i} memuat ulang semua informasi penyedianya.
  3. Saat menampilkan pratinjau widget, host akan memeriksa AppWidgetProviderInfo.generatedPreviewCategories, dan jika kategori yang dipilih tersedia, panggil AppWidgetManager.getWidgetPreview untuk menampilkan pratinjau tersimpan untuk penyedia ini.

Waktu untuk menelepon setWidgetPreview

Karena tidak ada callback untuk menyediakan pratinjau, aplikasi dapat memilih untuk mengirim melihat pratinjau kapan saja saat dijalankan. Frekuensi update pratinjau bergantung pada kasus penggunaan widget.

Daftar berikut menjelaskan dua kategori utama kasus penggunaan pratinjau:

  • Penyedia yang menampilkan data sebenarnya dalam pratinjau widget mereka, misalnya data yang dipersonalisasi atau informasi terbaru. Penyedia ini dapat menetapkan pratinjau setelah pengguna login atau telah melakukan konfigurasi awal di aplikasi mereka. Setelah itu, mereka dapat menyiapkan tugas berkala untuk memperbarui pratinjau pada ritme yang dipilih. Contoh widget jenis ini dapat berupa foto, kalender, cuaca, atau berita .
  • Penyedia yang menampilkan informasi statis di pratinjau atau widget tindakan cepat yang tidak menampilkan data apa pun. Penyedia ini dapat menetapkan pratinjau satu kali, saat aplikasi pertama kali diluncurkan. Contoh jenis widget ini mencakup perjalanan cepat tindakan atau widget pintasan Chrome.

Beberapa penyedia mungkin menampilkan pratinjau statis pada pemilih mode hub, tetapi informasi di pemilih layar utama. Penyedia ini harus mengikuti panduan untuk kedua kasus penggunaan ini guna menetapkan pratinjau.

Picture-in-Picture

Android 15 对画中画 (PiP) 模式进行了更改,确保在进入画中画模式时实现更流畅的转换。对于在主界面上叠加界面元素的应用,这将非常有用,因为这些元素会进入 PiP。

开发者使用 onPictureInPictureModeChanged 回调来定义用于切换叠加界面元素可见性的逻辑。当 PiP 进入或退出动画完成时,系统会触发此回调。从 Android 15 开始,PictureInPictureUiState 类包含另一种状态。

在这种界面状态下,以 Android 15(API 级别 35)为目标平台的应用会在画中画动画开始后立即观察到使用 isTransitioningToPip() 调用的 Activity#onPictureInPictureUiStateChanged 回调。在 PiP 模式下,许多界面元素与应用无关,例如包含建议、即将播放的视频、评分和标题等信息的视图或布局。当应用进入画中画模式时,请使用 onPictureInPictureUiStateChanged 回调隐藏这些界面元素。当应用从画中画窗口进入全屏模式时,请使用 onPictureInPictureModeChanged 回调取消隐藏这些元素,如以下示例所示:

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

不相关界面元素(适用于画中画窗口)的这种快速可见性切换有助于确保画中画进入动画更流畅、不闪烁。

Aturan Jangan Ganggu yang ditingkatkan

AutomaticZenRule 允许应用自定义注意力机制 管理(勿扰)规则,并确定何时启用或停用 。Android 15 极大地增强了这些规则,旨在提高 用户体验。其中包含以下增强功能:

  • AutomaticZenRule 添加类型,让系统能够应用特殊类型 对某些规则的处理
  • AutomaticZenRule 添加图标,使模式更加丰富 易于识别。
  • triggerDescription 字符串添加到 AutomaticZenRule,用于描述 规则应当对用户生效的条件。
  • 已添加 ZenDeviceEffects 更改为AutomaticZenRule,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。

Menetapkan VibrationEffect untuk saluran notifikasi

Android 15 mendukung setelan getaran yang kaya untuk notifikasi masuk dengan saluran menggunakan NotificationChannel.setVibrationEffect, sehingga pengguna dapat membedakan berbagai jenis notifikasi tanpa hanya dengan melihat perangkat mereka.

Chip status bar proyeksi media dan berhenti otomatis

Proyeksi media dapat mengekspos informasi pengguna pribadi. Chip status bar baru yang jelas membuat pengguna mengetahui proyeksi layar yang sedang berlangsung. Pengguna dapat mengetuk chip untuk menghentikan transmisi layar, berbagi, atau perekaman. Selain itu, untuk pengalaman pengguna yang lebih intuitif, setiap proyeksi layar yang sedang berlangsung kini otomatis berhenti saat layar perangkat dikunci.

用于屏幕共享、投屏和录制的状态栏条状标签。

Perangkat layar besar dan faktor bentuk

Android 15 memberi aplikasi Anda dukungan untuk mendapatkan hasil maksimal dari faktor bentuk Android, termasuk perangkat layar besar, perangkat flip, dan perangkat foldable.

Multitasking layar besar yang ditingkatkan

Android 15 memberi pengguna cara yang lebih baik untuk melakukan multitasking di perangkat layar besar. Sebagai misalnya, pengguna dapat menyimpan kombinasi aplikasi layar terpisah favorit mereka dengan cepat mengakses dan menyematkan taskbar di layar untuk beralih antar-aplikasi dengan cepat. Artinya bahwa memastikan aplikasi Anda bersifat adaptif kini menjadi semakin penting.

Google I/O memiliki sesi tentang Membangun Android adaptif aplikasi dan Membangun UI dengan Material 3 library adaptif yang dapat membantu, dan dokumentasi kami memiliki lebih banyak hal untuk membantu Anda Mendesain untuk layar.

Dukungan layar sampul

Aplikasi Anda dapat mendeklarasikan properti yang digunakan Android 15 untuk memungkinkan Application atau Activity ditampilkan di layar penutup kecil perangkat yang dapat dibalik yang didukung. Layar ini terlalu kecil untuk dianggap sebagai target yang kompatibel untuk menjalankan aplikasi Android, tetapi aplikasi Anda dapat memilih untuk mendukungnya, sehingga aplikasi Anda tersedia di lebih banyak tempat.

Konektivitas

Android 15 mengupdate platform untuk memberi aplikasi Anda akses ke kemajuan terbaru dalam teknologi nirkabel dan komunikasi.

Dukungan satelit

Android 15 terus memperluas dukungan platform untuk konektivitas satelit dan menyertakan beberapa elemen UI untuk memastikan pengalaman pengguna yang konsisten di seluruh lanskap konektivitas satelit.

Aplikasi dapat menggunakan ServiceState.isUsingNonTerrestrialNetwork() untuk mendeteksi saat perangkat terhubung ke satelit, sehingga memberi mereka mengapa layanan jaringan penuh mungkin tidak tersedia. Selain itu, Android 15 menyediakan dukungan untuk aplikasi SMS dan MMS serta aplikasi RCS bawaan untuk digunakan konektivitas satelit untuk mengirim dan menerima pesan.

Notifikasi muncul saat perangkat terhubung ke satelit.

Pengalaman NFC yang lebih lancar

Android 15 berupaya membuat pengalaman pembayaran nirsentuh menjadi lebih lancar dan andal sekaligus terus mendukung ekosistem aplikasi NFC Android yang andal. Di perangkat yang didukung, aplikasi dapat meminta NfcAdapter untuk memasuki mode pengamatan, tempat perangkat memproses tetapi tidak merespons pembaca NFC, yang mengirim PollingFrame objek layanan NFC aplikasi untuk diproses. Objek PollingFrame dapat digunakan untuk melakukan autentikasi sebelum komunikasi pertama ke pembaca NFC, sehingga memungkinkan transaksi sekali ketuk dalam banyak kasus.

Selain itu, aplikasi dapat mendaftarkan filter di perangkat yang didukung sehingga aplikasi dapat diberi tahu tentang aktivitas loop polling, yang memungkinkan operasi yang lancar dengan beberapa aplikasi yang mendukung NFC.

Peran Wallet

Android 15 memperkenalkan peran Wallet yang memungkinkan integrasi yang lebih erat dengan aplikasi dompet pilihan pengguna. Peran ini menggantikan setelan pembayaran nirsentuh default NFC. Pengguna dapat mengelola pemegang peran Wallet dengan membuka Setelan > Aplikasi > Aplikasi Default.

Peran Wallet digunakan saat merutekan tempelan NFC untuk AID yang terdaftar dalam kategori pembayaran. Ketukan selalu mengarah ke pemegang peran Wallet, kecuali jika aplikasi lain yang terdaftar untuk AID yang sama sedang berjalan di latar depan.

Peran ini juga digunakan untuk menentukan tempat kartu Akses Cepat Wallet harus ditempatkan saat diaktifkan. Jika peran disetel ke "Tidak ada", kartu Akses Cepat tidak tersedia dan ketukan NFC kategori pembayaran hanya dikirim ke aplikasi latar depan.

Keamanan

Android 15 membantu Anda meningkatkan keamanan aplikasi, melindungi data aplikasi, dan memberi pengguna transparansi dan kontrol yang lebih besar atas data mereka. Lihat presentasi Menjaga keamanan pengguna di Android dari Google I/O untuk mengetahui lebih lanjut upaya kami dalam meningkatkan pengamanan pengguna dan melindungi aplikasi Anda dari ancaman baru.

Mengintegrasikan Credential Manager dengan isi otomatis

Mulai Android 15, developer dapat menautkan tampilan tertentu seperti kolom nama pengguna atau sandi dengan permintaan Pengelola Kredensial, sehingga lebih mudah untuk memberikan pengalaman pengguna yang disesuaikan selama proses login. Saat pengguna berfokus pada salah satu tampilan ini, permintaan yang sesuai akan dikirim ke Pengelola Kredensial. Kredensial yang dihasilkan digabungkan di seluruh penyedia dan ditampilkan di UI penggantian isi otomatis, seperti saran inline atau saran dropdown. Library androidx.credentials Jetpack adalah endpoint pilihan yang dapat digunakan developer dan akan segera tersedia untuk lebih meningkatkan fitur ini di Android 15 dan yang lebih baru.

Mengintegrasikan pendaftaran dan login sekali ketuk dengan perintah biometrik

Pengelola Kredensial mengintegrasikan perintah biometrik ke dalam pembuatan kredensial dan proses login, sehingga penyedia tidak perlu lagi mengelola prompt biometrik. Akibatnya, penyedia kredensial hanya perlu fokus pada hasil alur create dan get, yang ditambah dengan hasil alur biometrik. Proses yang disederhanakan ini menciptakan proses pembuatan dan pengambilan kredensial yang lebih efisien dan sederhana.

Pengelolaan kunci untuk enkripsi end-to-end

Kami memperkenalkan E2eeContactKeysManager di Android 15, yang memfasilitasi enkripsi end-to-end (E2EE) di aplikasi Android Anda dengan menyediakan API tingkat OS untuk penyimpanan kunci publik kriptografis.

E2eeContactKeysManager dirancang untuk berintegrasi dengan aplikasi kontak platform guna memberi pengguna cara terpusat untuk mengelola dan memverifikasi kunci publik kontak mereka.

Pemeriksaan izin pada URI konten

Android 15 引入了一组用于对内容 URI 执行权限检查的 API:

Aksesibilitas

Android 15 menambahkan fitur yang meningkatkan aksesibilitas bagi pengguna.

Braille yang Lebih Baik

Di Android 15, kami telah memungkinkan TalkBack untuk mendukung layar Braille yang menggunakan standar HID melalui USB dan Bluetooth aman.

Standar ini, seperti yang digunakan oleh mouse dan keyboard, akan membantu Android mendukung berbagai penampil Braille yang lebih luas dari waktu ke waktu.

Internasionalisasi

Android 15 menambahkan fitur dan kemampuan yang melengkapi pengalaman pengguna saat perangkat digunakan dalam bahasa yang berbeda.

Font variabel CJK

从 Android 15 开始,面向中文、日文和韩文 (CJK) 语言的字体文件 NotoSansCJK 现在是可变字体。可变字体为中日韩语言的创意排版提供了更多可能性。设计师可以探索更多样式的排版,并制作出以前难以实现或根本无法实现的视觉效果出色的布局。

面向中文、日文和韩文 (CJK) 的可变字体在不同字体宽度下的显示效果。

Justifikasi antar-karakter

从 Android 15 开始,可以通过 使用 JUSTIFICATION_MODE_INTER_CHARACTER。“字词间的理由”原为 最初是在 Android 8.0(API 级别 26)中引入的, Justifications 功能为使用 例如中文、日语等。

使用 JUSTIFICATION_MODE_NONE 的日语文本布局。
使用 JUSTIFICATION_MODE_NONE 的英语文本布局。


使用 JUSTIFICATION_MODE_INTER_WORD 的日语文本布局。
使用 JUSTIFICATION_MODE_INTER_WORD 的英语文本布局。


使用 JUSTIFICATION_MODE_INTER_CHARACTER 的日语文本布局。
使用 JUSTIFICATION_MODE_INTER_CHARACTER 的英语文本布局。

Konfigurasi baris baru otomatis

Android mulai mendukung jeda baris berbasis frasa untuk bahasa Jepang dan Korea di Android 13 (level API 33). Namun, sementara jeda baris berbasis frasa meningkatkan keterbacaan baris pendek teks, mereka tidak bekerja dengan baik untuk baris teks yang panjang. Di Android 15, aplikasi dapat menerapkan jeda baris berbasis frasa hanya untuk baris pendek teks, menggunakan LINE_BREAK_WORD_STYLE_AUTO sebelumnya. Opsi ini memilih opsi gaya kata terbaik untuk teks.

Untuk baris teks pendek, jeda baris berbasis frasa digunakan, yang berfungsi sama seperti LINE_BREAK_WORD_STYLE_PHRASE, seperti yang ditunjukkan dalam gambar berikut:

Untuk baris teks yang pendek, LINE_BREAK_WORD_STYLE_AUTO menerapkan pemisah baris berbasis frasa untuk meningkatkan keterbacaan teks. Hal ini sama dengan menerapkan LINE_BREAK_WORD_STYLE_PHRASE.

Untuk baris teks yang lebih panjang, LINE_BREAK_WORD_STYLE_AUTO menggunakan gaya kata jeda baris, berfungsi sama dengan LINE_BREAK_WORD_STYLE_NONE, seperti yang ditunjukkan di gambar berikut:

Untuk baris teks panjang, LINE_BREAK_WORD_STYLE_AUTO tidak menerapkan gaya kata pemisah baris untuk meningkatkan keterbacaan teks. Hal ini sama dengan menerapkan LINE_BREAK_WORD_STYLE_NONE.

Font Hentaigana Jepang Tambahan

Di Android 15, file font untuk huruf Hiragana Jepang lama (yang dikenal sebagai Hentaigana) secara default dipaketkan. Bentuk unik karakter Hentaigana dapat menambahkan gaya unik pada karya seni atau desain sekaligus membantu mempertahankan transmisi dan pemahaman yang akurat tentang dokumen Jepang kuno.

Karakter dan gaya teks untuk Hentaigana Jepang font.

VideoLAN 圆锥图标 版权所有 (c) 1996-2010 VideoLAN。任何人都可以使用此徽标或修改版徽标来提及 VideoLAN 项目或 VideoLAN 团队开发的任何产品,但这并不表示该项目对其表示认可。

Vulkan 和 Vulkan 徽标是 Khronos Group Inc.的注册商标。

OpenGL 是注册商标,OpenGL ES 徽标是 Hewlett Packard Enterprise 的商标,已获得 Khronos 的许可。