Android 15 memperkenalkan fitur dan API baru yang hebat untuk para developer. Bagian berikut merangkum fitur ini untuk membantu Anda mulai menggunakan 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 level API 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 dan solusi developer terbaru untuk media dan kamera Android, lihat materi Membangun pengalaman media dan kamera Android modern dari Google I/O.
Peningkatan Cahaya Rendah
Android 15 memperkenalkan Low Light Boost, mode eksposur otomatis yang tersedia untuk Camera 2 dan ekstensi kamera mode malam. Peningkatan Cahaya Redup menyesuaikan eksposur streaming Pratinjau dalam kondisi cahaya redup. Hal ini berbeda dengan cara ekstensi kamera mode malam membuat gambar diam, karena mode malam menggabungkan serangkaian foto untuk membuat satu gambar yang ditingkatkan. Meskipun mode malam berfungsi sangat baik untuk membuat gambar diam, mode ini tidak dapat membuat streaming frame yang berkelanjutan, tetapi Low Light Boost dapat melakukannya. Dengan demikian, Pengoptimalan Cahaya Rendah memungkinkan kemampuan kamera, seperti:
- Memberikan pratinjau gambar yang ditingkatkan, sehingga pengguna dapat lebih baik membingkai gambar dalam kondisi cahaya redup
- Memindai kode QR dalam kondisi cahaya redup
Jika Anda mengaktifkan Peningkatan Cahaya Redup, fitur ini akan otomatis aktif saat ada tingkat cahaya yang rendah, dan nonaktif saat ada lebih banyak cahaya.
Aplikasi dapat merekam dari streaming Pratinjau dalam kondisi cahaya redup untuk menyimpan video yang lebih terang.
Untuk informasi selengkapnya, lihat Penguatan Cahaya Redup.
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
SINGLEdanTORCHsaat mengambil gambar.
Kontrol ruang kosong HDR
Android 15 memilih headroom HDR yang sesuai dengan kemampuan perangkat
yang mendasari dan kedalaman bit panel. Untuk halaman yang memiliki banyak konten
SDR, seperti aplikasi pesan yang menampilkan satu thumbnail HDR, perilaku
ini dapat memengaruhi kecerahan konten
SDR yang dirasakan. Android 15 memungkinkan Anda mengontrol headroom HDR dengan
setDesiredHdrHeadroom untuk mencapai keseimbangan antara konten
SDR dan HDR.
Kontrol keras suara

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 menambahkan dukungan untuk terhubung ke perangkat MIDI 2.0 menggunakan USB, yang berkomunikasi menggunakan Universal MIDI Packets (UMP). Android 15 memperluas dukungan UMP ke aplikasi MIDI virtual, yang memungkinkan aplikasi komposisi mengontrol aplikasi synthesizer sebagai perangkat MIDI 2.0 virtual seperti yang dilakukan dengan perangkat USB MIDI 2.0.
Decoding software AV1 yang lebih efisien
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 berpusat pada alat seperti Android Studio, Jetpack Compose, dan library Android Jetpack, kami selalu mencari cara di platform untuk membantu Anda mewujudkan visi dengan lebih mudah.
Update OpenJDK 17
Android 15 将继续更新 Android 的核心库,以与最新 OpenJDK LTS 版本中的功能保持一致。
其中包含以下主要功能和改进:
- 改进了 NIO 缓冲区的使用体验
- 数据流
- 其他
math和strictmath方法 util软件包更新,包括顺序的collection、map和setDeflater中的ByteBuffer支持- 安全更新,例如
X500PrivateCredential和安全密钥更新
这些 API 会通过 Google Play 系统更新在搭载 Android 12(API 级别 31)及更高版本的 10 亿多部设备上更新,以便您以最新的编程功能为目标平台。
Peningkatan PDF
Android 15 对 PdfRenderer API 进行了重大改进。应用可以整合呈现等高级功能
受密码保护的文件、注释、表单编辑、
searching,而 selection 则包含副本。支持线性化 PDF 优化,此功能可加快本地 PDF 查看速度并减少资源使用量。Jetpack PDF 库使用这些 API 来简化 PDF 的添加
查看功能。
PdfRenderer 已移至一个可使用 Google
Play 系统更新独立于平台版本,并且我们支持
将这些变更还原到 Android 11(API 级别 30),方法是创建兼容的
Android 15 之前版本的 API Surface,称为
PdfRendererPreV。
Penyempurnaan 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.
Peningkatan OpenType Variable Font API
Android 15 提高了 OpenType 可变字体的易用性。您可以创建
来自可变字体的 FontFamily 实例,而不指定粗细轴
使用 buildVariableFamily API。文本渲染程序会替换 wght 轴的值,以匹配显示的文本。
使用该 API 可以大大简化创建 Typeface 的代码:
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();
以前,如需创建相同的 Typeface,您需要更多代码:
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();
以下示例展示了同时使用旧版和新版 API 创建的 Typeface 的呈现方式:
在此示例中,使用旧 API 创建的 Typeface 不包含
为 350、450、550 和 650 创建准确的字体粗细
Font 实例,因此渲染程序会回退到最接近的权重。在
在此示例中,系统会渲染 300 而不是 350,渲染 400 而不是 450,
依此类推。相比之下,使用新 API 创建的 Typeface 会为给定重量动态创建 Font 实例,因此系统也会为 350、450、550 和 650 呈现准确的重量。
Kontrol pemisah baris terperinci
Mulai Android 15, TextView dan pemisah
baris yang mendasarinya dapat mempertahankan bagian teks tertentu di baris yang sama untuk meningkatkan
keterbacaan. Anda dapat memanfaatkan penyesuaian akhir baris ini dengan menggunakan
tag <nobreak> dalam resource string atau
createNoBreakSpan. Demikian pula, Anda dapat mempertahankan kata dari
pemisahan kata dengan menggunakan tag <nohyphen> atau
createNoHyphenationSpan.
Misalnya, resource string berikut tidak menyertakan baris baru, dan dirender dengan teks "Pixel 8 Pro" yang terputus di tempat yang tidak diinginkan:
<resources>
<string name="pixel8pro">The power and brains behind Pixel 8 Pro.</string>
</resources>
Sebaliknya, resource string ini menyertakan tag <nobreak>, yang menggabungkan
frasa "Pixel 8 Pro" dan mencegah pemisahan baris:
<resources>
<string name="pixel8pro">The power and brains behind <nobreak>Pixel 8 Pro.</nobreak></string>
</resources>
Perbedaan cara string ini dirender ditunjukkan dalam gambar berikut:
<nobreak>.
<nobreak>.Pengarsipan aplikasi
Android dan Google Play mengumumkan dukungan untuk pengarsipan aplikasi tahun lalu, yang memungkinkan pengguna mengosongkan ruang dengan menghapus sebagian aplikasi yang jarang digunakan dari perangkat yang dipublikasikan menggunakan Android App Bundle di Google Play. Android 15 menyertakan dukungan tingkat OS untuk pengarsipan dan pembatalan pengarsipan aplikasi, sehingga mempermudah semua app store untuk menerapkannya.
Aplikasi dengan izin REQUEST_DELETE_PACKAGES dapat memanggil
metode PackageInstaller requestArchive untuk meminta pengarsipan
paket aplikasi yang diinstal, yang akan menghapus APK dan file dalam cache, tetapi mempertahankan
data pengguna. Aplikasi yang diarsipkan akan ditampilkan sebagai aplikasi yang dapat ditampilkan melalui
LauncherApps API; pengguna akan melihat tampilan UI
untuk menyoroti bahwa mereka
aplikasi akan diarsipkan. Jika pengguna mengetuk aplikasi yang diarsipkan, penginstal yang bertanggung jawab
akan mendapatkan permintaan untuk membatalkan pengarsipan file, dan proses pemulihan dapat
dipantau oleh siaran ACTION_PACKAGE_ADDED.
Mengaktifkan mode 16 KB di perangkat menggunakan opsi developer
Aktifkan opsi developer Boot dengan ukuran halaman 16 KB untuk mem-boot perangkat dalam mode 16 KB.
Dalam versi QPR Android 15, Anda dapat menggunakan opsi developer yang tersedia di perangkat tertentu untuk mem-boot 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 tinggi)
Pixel 8a (dengan Android 15 QPR1 atau yang lebih baru)
Pixel 9, 9 Pro, dan 9 Pro XL (dengan Android 15 QPR2 atau yang lebih baru)
Pixel 9a (dengan Android 16 atau yang lebih baru)
Grafik
Android 15 menghadirkan peningkatan grafis terbaru, termasuk ANGLE dan penambahan pada sistem grafis Canvas.
Memodernisasi akses GPU Android
与早期相比,Android 硬件已经有了很大的进步。早期,核心操作系统在单个 CPU 上运行,并且使用基于固定功能流水线的 API 访问 GPU。从 Android 7.0(API 级别 24)开始,NDK 中就提供了 Vulkan® 图形 API,其较低级别的抽象更好地反映了现代 GPU 硬件,可更好地扩缩以支持多个 CPU 核心,并可降低 CPU 驱动程序开销,从而提升应用性能。所有现代游戏引擎都支持 Vulkan。
Vulkan 是 Android 与 GPU 的首选接口。因此,Android 15 包含 ANGLE 作为可选层,用于在 Vulkan 基础上运行 OpenGL® ES。改用 ANGLE 将标准化 Android OpenGL 实现,提高兼容性,在某些情况下还有助于提升性能。在 Android 15 中,您可以依次前往设置 -> 系统 -> 开发者选项 -> 实验性功能:启用 ANGLE,启用开发者选项,以便通过 ANGLE 测试 OpenGL ES 应用的稳定性和性能。
Android ANGLE on Vulkan 路线图
为了简化 GPU 堆栈,我们今后将在更多新设备上将 ANGLE 作为 GL 系统驱动程序提供,未来 OpenGL/ES 将只能通过 ANGLE 获得支持。尽管如此,我们计划继续在所有设备上支持 OpenGL ES。
建议的后续措施
使用开发者选项为 OpenGL ES 选择 ANGLE 驱动程序,然后测试您的应用。对于新项目,我们强烈建议您为 C/C++ 使用 Vulkan。
Peningkatan untuk Canvas
Android 15 melanjutkan modernisasi sistem grafis Canvas Android dengan kemampuan tambahan:
Matrix44menyediakan matriks 4x4 untuk mengubah koordinat yang harus digunakan saat Anda ingin memanipulasi kanvas dalam 3D.clipShadermemotong klip saat ini dengan shader yang ditentukan, sedangkanclipOutShadermenetapkan 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 Anda. Android 15 memperkenalkan API yang membantu membuat tugas di aplikasi Anda dieksekusi secara lebih efisien, mengoptimalkan performa aplikasi, dan mengumpulkan insight tentang aplikasi Anda.
Untuk praktik terbaik yang hemat baterai, men-debug penggunaan jaringan dan daya, serta detail tentang cara kami meningkatkan efisiensi baterai tugas latar belakang di Android 15 dan versi Android terbaru, lihat materi Meningkatkan efisiensi baterai tugas 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 mendetail tentang ukuran aplikasi
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 数据库,尤其是在处理大型 或运行对延迟敏感的查询时
- 只读延迟事务:在发出
只读(不包括写入语句),请使用
beginTransactionReadOnly()和beginTransactionWithListenerReadOnly(SQLiteTransactionListener)发出只读的DEFERRED事务。此类事务 如果数据库处于 WAL 模式 与IMMEDIATE或EXCLUSIVE事务并发运行。 - 行数和 ID:添加了 API 以检索已更改的行数和 ID
行或最后插入的行 ID 而不发出额外的查询。
getLastChangedRowCount()会返回当前事务中最近的 SQL 语句插入、更新或删除的行数,而getTotalChangedRowCount()会返回当前连接的计数。getLastInsertRowId()返回最后一行的rowid以便在当前连接中插入 - 原始语句:发出原始 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 menambahkan dukungan untuk aplikasi guna mendeteksi bahwa aplikasi sedang direkam. Callback dipanggil setiap kali aplikasi melakukan transisi antara terlihat atau tidak terlihat dalam perekaman layar. Aplikasi dianggap terlihat jika aktivitas yang dimiliki oleh UID proses pendaftaran direkam. Dengan cara ini, jika aplikasi melakukan operasi yang sensitif, Anda dapat memberi tahu pengguna bahwa mereka sedang direkam.
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 di-build dengan dukungan untuk resolusi Intent yang lebih presisi melalui
UriRelativeFilterGroup, yang berisi kumpulan
objek UriRelativeFilter yang membentuk kumpulan aturan pencocokan
Intent yang harus dipenuhi, termasuk parameter kueri URL, fragmen
URL, dan aturan pemblokiran atau pengecualian.
Aturan ini dapat ditentukan dalam file XML AndroidManifest dengan
tag <uri-relative-filter-group>, yang secara opsional dapat menyertakan
tag android:allow. Tag tersebut dapat berisi tag <data> yang menggunakan atribut tag data yang ada serta atribut android:query dan android:fragment.
Berikut adalah contoh sintaksis AndroidManifest:
<intent-filter android:autoVerify="true">
<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:host="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 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:
- Aplikasi dengan logika untuk profil kerja yang mengasumsikan bahwa salinan aplikasi yang diinstal yang tidak ada di profil utama berada di profil kerja.
- Aplikasi medis
- Aplikasi peluncur
- Aplikasi app store
Membuat kueri pilihan pengguna terbaru untuk Akses Foto yang Dipilih
Aplikasi kini hanya dapat menyoroti foto dan video yang baru saja dipilih saat
akses sebagian ke izin media diberikan. Fitur ini dapat meningkatkan
pengalaman pengguna untuk aplikasi yang sering meminta akses ke foto dan
video. Untuk menggunakan fitur ini di aplikasi Anda, aktifkan argumen
QUERY_ARG_LATEST_SELECTION_ONLY saat membuat kueri MediaStore
melalui 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 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:
- Sasaran penyelesaian seputar kalori yang terbakar, jarak, durasi, repetisi, dan langkah.
- Sasaran performa sekitar pengulangan sebanyak mungkin (AMRAP), irama, detak jantung, daya, tingkat pengerahan tenaga yang dirasakan, dan kecepatan.
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 sesi Meningkatkan pengalaman pengguna aplikasi Android Anda 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.
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:
- Penyedia widget akan memanggil
setWidgetPreviewkapan saja. Pratinjau yang disediakan dipertahankan diAppWidgetServicedengan info penyedia lainnya. setWidgetPreviewmemberi tahu host tentang pratinjau yang diperbarui melalui callbackAppWidgetHost.onProvidersChanged. Sebagai respons, widget {i>host<i} memuat ulang semua informasi penyedianya.- Saat menampilkan pratinjau widget, host akan memeriksa
AppWidgetProviderInfo.generatedPreviewCategories, dan jika kategori yang dipilih tersedia, panggilAppWidgetManager.getWidgetPreviewuntuk 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 memperkenalkan perubahan pada Picture-in-Picture (PiP) yang memastikan transisi yang lebih lancar saat memasuki mode PiP. Hal ini akan bermanfaat bagi aplikasi dengan elemen UI yang ditempatkan di atas UI utamanya, yang akan masuk ke PiP.
Developer menggunakan callback onPictureInPictureModeChanged untuk menentukan logika
yang mengubah visibilitas elemen UI overlay. Callback ini
dipicu saat animasi masuk atau keluar PiP selesai. Dimulai dalam
Android 15, class PictureInPictureUiState menyertakan status lain.
Dengan status UI ini, aplikasi yang menargetkan Android 15 (API level 35) akan mengamati
Callback Activity#onPictureInPictureUiStateChanged dipanggil dengan
isTransitioningToPip() segera setelah animasi PiP dimulai. Ada
banyak elemen UI yang tidak relevan untuk aplikasi saat dalam mode PiP, untuk
contoh tampilan atau tata letak yang menyertakan informasi seperti saran, teks mendatang
video, rating, dan judul. Saat aplikasi masuk ke mode PiP, gunakan
Callback onPictureInPictureUiStateChanged untuk menyembunyikan elemen UI ini. Jika
aplikasi masuk ke mode layar penuh dari jendela PiP, gunakan
Callback onPictureInPictureModeChanged untuk memperlihatkan elemen ini, seperti yang ditunjukkan pada
contoh berikut:
override fun onPictureInPictureUiStateChanged(pipState: PictureInPictureUiState) {
if (pipState.isTransitioningToPip()) {
// Hide UI elements
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean) {
if (isInPictureInPictureMode) {
// Unhide UI elements
}
}
Tombol visibilitas cepat dari elemen UI yang tidak relevan (untuk jendela PiP) membantu memastikan animasi masuk PiP yang lebih halus dan bebas kedipan.
Aturan Jangan Ganggu yang ditingkatkan
AutomaticZenRule 允许应用自定义注意力机制
管理(勿扰)规则,并确定何时启用或停用
。Android 15 极大地增强了这些规则,旨在提高
用户体验。其中包含以下增强功能:
- 向
AutomaticZenRule添加类型,让系统能够应用特殊类型 对某些规则的处理 - 向
AutomaticZenRule添加图标,使模式更加丰富 易于识别。 - 将
triggerDescription字符串添加到AutomaticZenRule,用于描述 规则应当对用户生效的条件。 - 已添加
ZenDeviceEffects更改为AutomaticZenRule,从而允许规则触发灰度等操作 显示、夜间模式或调暗壁纸。
Menetapkan VibrationEffect untuk saluran notifikasi
Android 15 supports setting rich vibrations for incoming notifications by
channel using NotificationChannel.setVibrationEffect, so
your users can distinguish between different types of notifications without
having to look at their device.
Chip status proyeksi media dan penghentian 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.
Layar besar dan faktor bentuk
Android 15 memberi aplikasi Anda dukungan untuk mendapatkan hasil maksimal dari faktor bentuk Android, termasuk layar besar, perangkat flippable, 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 luar
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.
Pengalaman NFC yang lebih lancar
Android 15 is working to make the tap to pay experience more seamless and
reliable while continuing to support Android's robust NFC app ecosystem. On
supported devices, apps can request the NfcAdapter to enter
observe mode, where the device listens but doesn't respond to NFC
readers, sending the app's NFC service PollingFrame
objects to process. The PollingFrame objects can be used to auth
ahead of the first communication to the NFC reader, allowing for a one tap
transaction in many cases.
In addition, apps can register a filter on supported devices so they can be notified of polling loop activity, which allows for smooth operation with multiple NFC-aware applications.
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 lebih banyak transparansi dan kontrol atas data mereka. Tonton video Melindungi keamanan pengguna di Android dari Google I/O untuk mengetahui lebih lanjut tindakan yang kami lakukan untuk meningkatkan perlindungan 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 memperkenalkan serangkaian API yang melakukan pemeriksaan izin pada URI konten:
Context.checkContentUriPermissionFull: Tindakan ini melakukan pemeriksaan izin penuh pada URI konten.- Atribut manifes
ActivityrequireContentUriPermissionFromCaller: Ini menerapkan izin yang ditentukan pada URI konten yang diberikan saat peluncuran aktivitas. - Class
ComponentCalleruntuk pemanggilActivity: Class ini mewakili aplikasi yang meluncurkan aktivitas.
Aksesibilitas
Android 15 menambahkan fitur yang meningkatkan aksesibilitas bagi pengguna.
Braille yang Lebih Baik
In Android 15, we've made it possible for TalkBack to support Braille displays that are using the HID standard over both USB and secure Bluetooth.
This standard, much like the one used by mice and keyboards, will help Android support a wider range of Braille displays over time.
Internasionalisasi
Android 15 menambahkan fitur dan kemampuan yang melengkapi pengalaman pengguna saat perangkat digunakan dalam bahasa yang berbeda.
Font variabel CJK
Mulai Android 15, file font untuk bahasa China, Jepang, dan Korea (CJK), NotoSansCJK, kini menjadi font variabel. Font variabel membuka kemungkinan untuk tipografi kreatif dalam bahasa CJK. Desainer dapat menjelajahi berbagai gaya yang lebih luas dan membuat tata letak yang menarik secara visual yang sebelumnya sulit atau tidak mungkin dicapai.
Justifikasi antar-karakter
Mulai Android 15, teks dapat dibenarkan menggunakan spasi huruf dengan
menggunakan JUSTIFICATION_MODE_INTER_CHARACTER. Justifikasi antarkata
pertama kali diperkenalkan di Android 8.0 (API level 26), dan justifikasi antarkarakter
memberikan kemampuan serupa untuk bahasa yang menggunakan
karakter spasi kosong untuk segmentasi, seperti China, Jepang, dan lainnya.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_NONE.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_WORD.
JUSTIFICATION_MODE_INTER_CHARACTER.
JUSTIFICATION_MODE_INTER_CHARACTER.Konfigurasi jeda baris otomatis
Android 从以下语言开始支持基于短语的日语和韩语换行:
Android 13(API 级别 33)。不过,虽然基于短语的行分隔符可以提高短文本行的可读性,但对于长文本行,效果并不理想。在 Android 15 中,应用只能使用 LINE_BREAK_WORD_STYLE_AUTO 选项,针对短文本行应用基于短语的行分隔符。此选项会为文本选择最佳字词样式选项。
对于短文本行,则使用基于短语的换行符,功能相同
为 LINE_BREAK_WORD_STYLE_PHRASE,如
以下图片:
LINE_BREAK_WORD_STYLE_AUTO
应用基于短语的换行符,以提高文本的可读性。
这与应用
LINE_BREAK_WORD_STYLE_PHRASE。对于较长的文本行,LINE_BREAK_WORD_STYLE_AUTO 会使用 no
换行字词样式,
LINE_BREAK_WORD_STYLE_NONE,如
以下图片:
LINE_BREAK_WORD_STYLE_AUTO
应用不换行的字词样式,以提高文本的可读性。
这与应用
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.
Kegel VideoLAN Hak Cipta (c) 1996-2010 VideoLAN. Logo ini atau versi yang dimodifikasi dapat digunakan atau dimodifikasi oleh siapa saja untuk merujuk ke project VideoLAN atau produk apa pun yang dikembangkan oleh tim VideoLAN, tetapi tidak menunjukkan dukungan oleh project.
Vulkan dan logo Vulkan adalah merek dagang terdaftar dari Khronos Group Inc.
OpenGL adalah merek dagang terdaftar dan logo OpenGL ES adalah merek dagang Hewlett Packard Enterprise yang digunakan dengan izin dari Khronos.