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 memperkenalkan Low Light Boost, mode eksposur otomatis baru yang tersedia untuk Kamera 2 dan ekstensi kamera mode malam. Peningkatan Cahaya Rendah menyesuaikan eksposur streaming Pratinjau dalam kondisi cahaya redup. Cara ini berbeda dengan cara ekstensi kamera mode malam membuat gambar diam, karena mode malam menggabungkan burst foto untuk membuat satu gambar yang disempurnakan. Meskipun mode malam berfungsi sangat baik untuk membuat gambar diam, mode ini tidak dapat membuat streaming frame secara berkelanjutan, tetapi Peningkatan Cahaya Rendah dapat melakukannya. Dengan demikian, Boost Cahaya Rendah memungkinkan kemampuan kamera baru, seperti:

  • Memberikan pratinjau gambar yang disempurnakan, sehingga pengguna lebih dapat membingkai gambar dengan cahaya redup
  • Memindai kode QR dalam kondisi cahaya redup

Jika Anda mengaktifkan Peningkatan Cahaya Rendah, fitur akan otomatis menyala saat level cahaya rendah, dan dinonaktifkan saat ada lebih banyak cahaya.

Aplikasi dapat merekam streaming Pratinjau dalam kondisi cahaya redup untuk menyimpan video yang terang.

Untuk informasi selengkapnya, lihat Peningkatan Cahaya Rendah.

Kontrol kamera dalam aplikasi

Android 15 menambahkan ekstensi baru untuk kontrol yang lebih besar atas hardware kamera dan algoritmanya di perangkat yang didukung:

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

Kontrol headroom HDR

Android 15 memilih headroom HDR yang sesuai untuk kemampuan perangkat dasar dan kedalaman bit panel. Untuk halaman yang memiliki banyak konten SDR, seperti aplikasi pesan yang menampilkan satu thumbnail HDR, perilaku ini dapat berpengaruh buruk pada kecerahan konten SDR yang dirasakan. Android 15 memungkinkan Anda mengontrol headroom HDR dengan setDesiredHdrHeadroom untuk mencapai keseimbangan antara konten SDR dan HDR.

Kecerahan elemen UI SDR di layar kiri tampak lebih seragam daripada kecerahan di layar kanan, yang menyimulasikan kemungkinan masalah headroom saat konten HDR dan SDR digabungkan. Dengan menyesuaikan headroom HDR, Anda dapat mencapai keseimbangan yang lebih baik antara konten SDR dan HDR.

Kontrol volume

Android 15 introduces support for the CTA-2075 loudness standard to help you avoid audio loudness inconsistencies and ensure users don't have to constantly adjust volume when switching between content. The system leverages known characteristics of the output devices (headphones and speaker) along with loudness metadata available in AAC audio content to intelligently adjust the audio loudness and dynamic range compression levels.

To enable this feature, you need to ensure loudness metadata is available in your AAC content and enable the platform feature in your app. For this, you instantiate a LoudnessCodecController object by calling its create factory method with the audio session ID from the associated AudioTrack; this automatically starts applying audio updates. You can pass an OnLoudnessCodecUpdateListener to modify or filter loudness parameters before they are applied on the 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 will also be updated to use the LoudnessCodecController APIs for a seamless app integration.

Perangkat MIDI 2.0 virtual

Android 13 menambahkan dukungan untuk terhubung ke Perangkat MIDI 2.0 yang menggunakan USB, yang berkomunikasi menggunakan Paket MIDI Universal (UMP). Android 15 memperluas dukungan UMP ke MIDI virtual aplikasi, yang memungkinkan aplikasi komposisi mengontrol aplikasi synthesizer perangkat MIDI 2.0 virtual sama seperti perangkat USB MIDI 2.0.

Decoding software AV1 yang lebih efisien

Logo dav1d

dav1d, dekoder software AV1 yang populer dari VideoLAN kini tersedia untuk perangkat Android yang tidak mendukung dekode AV1 di hardware. dav1d berperforma hingga 3x lebih banyak dibandingkan dekoder software AV1 lama, sehingga memungkinkan pemutaran HD AV1 bagi lebih banyak pengguna, termasuk beberapa perangkat tingkat rendah dan menengah.

Untuk saat ini, aplikasi Anda harus memilih untuk menggunakan dav1d dengan memanggilnya berdasarkan nama "c2.android.av1-dav1d.decoder". dav1d akan dijadikan sebagai dekoder software AV1 default dalam update berikutnya. Dukungan ini distandardisasi 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 melanjutkan pekerjaan memuat ulang library inti Android agar selaras dengan fitur dalam rilis OpenJDK LTS terbaru.

Fitur dan peningkatan utama berikut disertakan:

API ini diupdate di lebih dari satu miliar perangkat yang menjalankan Android 12 (API level 31) dan yang lebih baru melalui update Sistem Google Play, sehingga Anda dapat menargetkan fitur pemrograman terbaru.

Peningkatan PDF

Android 15 includes substantial improvements to the PdfRenderer APIs. Apps can incorporate advanced features such as rendering password-protected files, annotations, form editing, searching, and selection with copy. Linearized PDF optimizations are supported to speed local PDF viewing and reduce resource use. The Jetpack PDF library uses these APIs to simplify adding PDF viewing capabilities to your app.

The latest updates to PDF rendering include features such as searching an embedded PDF file.

The PdfRenderer has been moved to a module that can be updated using Google Play system updates independent of the platform release, and we're supporting these changes back to Android 11 (API level 30) by creating a compatible pre-Android 15 version of the API surface, called PdfRendererPreV.

Pengoptimalan pengalihan bahasa otomatis

Android 14 增加了设备端音频中的多语言识别功能,可在语言之间自动切换,但这可能会导致单词丢失,尤其是在语言切换时,两种话语之间的停顿较少时。Android 15 添加了额外的控件,可帮助应用根据其用例调整此切换。EXTRA_LANGUAGE_SWITCH_INITIAL_ACTIVE_DURATION_TIME_MILLIS 会将自动切换限制为仅在音频会话开始时进行,而 EXTRA_LANGUAGE_SWITCH_MATCH_SWITCHES 则会在指定次数的切换后停用语言切换。如果您希望自动检测到会话期间只讲一种语言,这些选项特别有用。

OpenType Variable Font API yang ditingkatkan

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

在此示例中,使用旧 API 创建的 Typeface 不包含 为 350、450、550 和 650 创建准确的字体粗细 Font 实例,因此渲染程序会回退到最接近的权重。在 在此示例中,系统会渲染 300 而不是 350,渲染 400 而不是 450, 依此类推。相比之下,使用新 API 创建的 Typeface 会动态创建 给定权重的 Font 实例,因此系统会渲染 350 的准确权重, 450、550 和 650。

Kontrol batas 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:

Tata letak untuk baris teks dengan frasa "Pixel 8 Pro". yang tidak digabungkan menggunakan tag <nobreak>.
Tata letak untuk baris teks yang sama dengan frasa "Pixel 8 Pro". yang digabungkan menggunakan tag <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.

Grafik

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

Modernisasi akses GPU Android

Logo Vulkan

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

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

Android ANGLE di roadmap Vulkan

Roadmap perubahan mendatang pada Android GPU API.

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

Rekomendasi langkah selanjutnya

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

Peningkatan untuk Canvas

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

  • 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, sementara clipOutShader menetapkan klip ke perbedaan klip saat ini dan shader, masing-masing memperlakukan shader sebagai masker alfa. Hal ini mendukung penggambaran bentuk yang 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 hemat baterai, proses debug jaringan dan penggunaan daya, serta detail tentang cara kami meningkatkan efisiensi baterai pekerjaan latar belakang di Android 15 dan versi Android terbaru, lihat presentasi Meningkatkan efisiensi baterai pekerjaan latar belakang di Android dari Google I/O.

ApplicationStartInfo API

In previous versions of Android, app startup has been a bit of a mystery. It was challenging to determine within your app whether it started from a cold, warm, or hot state. It was also difficult to know how long your app spent during the various launch phases: forking the process, calling onCreate, drawing the first frame, and more. When your Application class was instantiated, you had no way of knowing whether the app started from a broadcast, a content provider, a job, a backup, boot complete, an alarm, or an Activity.

The ApplicationStartInfo API on Android 15 provides all of this and more. You can even choose to add your own timestamps into the flow to help collect timing data in one place. In addition to collecting metrics, you can use ApplicationStartInfo to help directly optimize app startup; for example, you can eliminate the costly instantiation of UI-related libraries within your Application class when your app is starting up due to a broadcast.

Informasi ukuran aplikasi mendetail

Sejak Android 8.0 (level API 26), Android telah menyertakan StorageStats.getAppBytes API yang merangkum ukuran aplikasi yang diinstal sebagai satu jumlah byte, yang merupakan jumlah ukuran APK, ukuran file yang diekstrak dari APK, dan file yang dihasilkan di perangkat seperti kode yang dikompilasi di awal (AOT). Jumlah ini tidak terlalu memiliki gambaran terkait cara aplikasi Anda menggunakan penyimpanan.

Android 15 menambahkan StorageStats.getAppBytesByDataType([type]) API, yang memungkinkan Anda mendapatkan insight tentang bagaimana aplikasi menggunakan semua ruang penyimpanan tersebut, termasuk pemisahan file APK, AOT dan kode terkait percepatan, metadata dex, library, serta 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 continues our investment in the Android Dynamic Performance Framework (ADPF), a set of APIs that allow games and performance intensive apps to interact more directly with power and thermal systems of Android devices. On supported devices, Android 15 adds ADPF capabilities:

  • A power-efficiency mode for hint sessions to indicate that their associated threads should prefer power saving over performance, great for long-running background workloads.
  • GPU and CPU work durations can both be reported in hint sessions, allowing the system to adjust CPU and GPU frequencies together to best meet workload demands.
  • Thermal headroom thresholds to interpret possible thermal throttling status based on headroom prediction.

To learn more about how to use ADPF in your apps and games, head over to the documentation.

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 通过 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 privasi dapat dibuka dan dikunci untuk ditampilkan atau disembunyikan aplikasi sensitif di perangkat.

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

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

Pengguna tidak dapat memindahkan aplikasi yang sudah ada dan datanya ke ruang privasi. Sebagai gantinya, pengguna memilih opsi instal di ruang privasi untuk menginstal aplikasi menggunakan mana pun {i>app store<i} yang mereka sukai. Aplikasi di ruang privasi dipasang sebagai salinan terpisah dari aplikasi apa pun di ruang utama (salinan baru dari aplikasi yang sama).

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

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

Membuat kueri pilihan pengguna terbaru untuk Akses Foto yang Dipilih

Apps can now highlight only the most-recently-selected photos and videos when partial access to media permissions is granted. This feature can improve the user experience for apps that frequently request access to photos and videos. To use this feature in your app, enable the QUERY_ARG_LATEST_SELECTION_ONLY argument when querying MediaStore through 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 menyertakan Privacy Sandbox di Android versi terbaru. Penambahan ini adalah bagian dari upaya kami untuk mengembangkan teknologi baru yang meningkatkan privasi pengguna dan memungkinkan pengalaman iklan yang dipersonalisasi dan efektif untuk aplikasi seluler. Halaman sandbox privasi kami memiliki informasi selengkapnya tentang Privacy Sandbox di pratinjau developer Android dan program beta untuk membantu Anda memulai.

Health Connect

Android 15 集成了与 Health Connect by Android 相关的最新扩展程序。Health Connect by Android 是一个安全的集中式平台,可用于管理和共享应用收集的健康与健身数据。此次更新 增加了对健身营养、体表温度、训练计划等。

体表温度追踪功能让用户可以更精确地存储和分享体表温度 来自穿戴式设备或其他跟踪设备的体温数据。

训练计划是一种结构化的锻炼计划,可帮助用户实现健身目标。训练计划支持各种完成和表现目标:

如需详细了解 Android 中 Health Connect 的最新更新,请参阅 利用 Android 打造自适应体验 健康演讲。

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

在 Android 15 之前,提供微件选择器预览的唯一方法是指定静态图片或布局资源。这些预览通常与放置在主屏幕上的实际 widget 的外观大不相同。此外,由于无法使用 Jetpack Glance 创建静态资源,因此“资讯一览” 开发者必须为其微件截屏或创建 XML 布局, 微件预览。

Android 15 添加了对生成的预览的支持。这意味着,应用微件提供程序可以生成 RemoteViews 以用作选择器预览,而不是静态资源。

应用可以向微件选择器提供远程视图, 更新选择器中的内容,使其更能代表用户的内容 看到的内容。

推送 API

应用可以通过推送 API 提供生成的预览。应用可以提供 预览,并且不会收到明确的请求, 以提供预览。预览会保留在 AppWidgetService 中,并且主持人可以按需请求预览。以下示例加载了一个 XML 微件 并将其设置为预览:

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

预期的流程如下:

  1. 任何时候,widget 提供程序都会调用 setWidgetPreview。提供的预览会与其他提供方信息一起保留在 AppWidgetService 中。
  2. setWidgetPreview 会通过 AppWidgetHost.onProvidersChanged 回调。作为回应,微件宿主会重新加载其所有提供方信息。
  3. 显示微件预览时,主机会检查 AppWidgetProviderInfo.generatedPreviewCategories,如果所选类别可用,则调用 AppWidgetManager.getWidgetPreview 以返回此提供程序的已保存预览。

何时调用 setWidgetPreview

由于没有用于提供预览的回调,因此应用可以选择在运行期间的任何时间发送预览。预览的更新频率取决于微件的用例。

以下列表介绍了两大类预览用例:

  • 在 widget 预览中显示真实数据(例如个性化数据)的提供程序 或最新信息。这些提供商可以设置预览 已登录 Google 账号或已在其应用中完成初始配置。之后 可以设置一项定期任务,按照所选的节奏更新预览。 此类 widget 的示例包括照片、日历、天气或新闻 widget。
  • 在预览中显示静态信息或不显示任何数据的快捷操作 widget 的提供程序。这些提供程序可以在应用首次启动时设置预览一次。例如,快速开车便是此类微件的示例 操作 widget 或 Chrome 快捷方式 widget。

某些提供商可能会在基座接入模式选择器上显示静态预览,但真实的 信息。这些提供商应遵循指南 设置预览

Picture-in-Picture

Android 15 introduces changes in Picture-in-Picture (PiP) ensuring an even smoother transition when entering into PiP mode. This will be beneficial for apps having UI elements overlaid on top of their main UI, which goes into PiP.

Developers use the onPictureInPictureModeChanged callback to define logic that toggles the visibility of the overlaid UI elements. This callback is triggered when the PiP enter or exit animation is completed. Beginning in Android 15, the PictureInPictureUiState class includes another state.

With this UI state, apps targeting Android 15 (API level 35) will observe the Activity#onPictureInPictureUiStateChanged callback being invoked with isTransitioningToPip() as soon as the PiP animation starts. There are many UI elements that are not relevant for the app when it is in PiP mode, for example views or layout that include information such as suggestions, upcoming video, ratings, and titles. When the app goes to PiP mode, use the onPictureInPictureUiStateChanged callback to hide these UI elements. When the app goes to full screen mode from the PiP window, use onPictureInPictureModeChanged callback to unhide these elements, as shown in the following examples:

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

This quick visibility toggle of irrelevant UI elements (for a PiP window) helps ensure a smoother and flicker-free PiP enter animation.

Aturan Jangan Ganggu yang ditingkatkan

AutomaticZenRule lets apps customize Attention Management (Do Not Disturb) rules and decide when to activate or deactivate them. Android 15 greatly enhances these rules with the goal of improving the user experience. The following enhancements are included:

  • Adding types to AutomaticZenRule, allowing the system to apply special treatment to some rules.
  • Adding an icon to AutomaticZenRule, helping to make the modes be more recognizable.
  • Adding a triggerDescription string to AutomaticZenRule that describes the conditions on which the rule should become active for the user.
  • Added ZenDeviceEffects to AutomaticZenRule, allowing rules to trigger things like grayscale display, night mode, or dimming the wallpaper.

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

Media projection can expose private user information. A new, prominent status bar chip makes users aware of any ongoing screen projection. Users can tap the chip to stop screen casting, sharing, or recording. Also, for a more intuitive user experience, any in‑progress screen projection now automatically stops when the device screen is locked.

Status bar chip for screen sharing, casting, and recording.

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 gives users better ways to multitask on large screen devices. For example, users can save their favorite split-screen app combinations for quick access and pin the taskbar on screen to quickly switch between apps. This means that making sure your app is adaptive is more important than ever.

Google I/O has sessions on Building adaptive Android apps and Building UI with the Material 3 adaptive library that can help, and our documentation has more to help you Design for large screens.

Dukungan layar sampul

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

Konektivitas

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

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 lebih lancar dan andal sambil terus mendukung ekosistem aplikasi NFC Android yang kuat. Pada perangkat yang didukung, aplikasi dapat meminta NfcAdapter untuk memasuki mode pengamatan, yaitu perangkat memproses tetapi tidak merespons pembaca NFC, yang mengirimkan PollingFrame objek layanan NFC aplikasi untuk diproses. Objek PollingFrame dapat digunakan untuk mengautentikasi sebelum komunikasi pertama ke pembaca NFC, sehingga dalam banyak kasus, memungkinkan untuk transaksi sekali ketuk.

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

Peran Wallet

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

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

Peran ini juga digunakan untuk menentukan tempat kartu QuickAccess Wallet harus berada saat diaktifkan. Jika peran disetel ke "Tidak ada", kartu QuickAccess tidak akan tersedia dan ketukan NFC kategori pembayaran hanya akan 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 Pengelola Kredensial dengan isi otomatis

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.

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 menyeluruh (E2EE) di aplikasi Android Anda dengan menyediakan API level 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 kumpulan API baru yang melakukan pemeriksaan izin pada URI konten:

Aksesibilitas

Android 15 menambahkan fitur yang meningkatkan aksesibilitas bagi pengguna.

Braille yang Lebih Baik

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

Standar ini, seperti yang digunakan oleh mouse dan keyboard, akan membantu Android mendukung lebih banyak layar Braille 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

Mulai Android 15, file font untuk bahasa China, Jepang, dan Korea (CJK), NotoSansCJK, sekarang menjadi font variabel. {i>Font<i} variabel membuka kemungkinan baru untuk tipografi kreatif dalam bahasa CJK. Desainer dapat mempelajari berbagai gaya yang lebih luas dan membuat tata letak yang memukau secara visual yang sebelumnya sulit atau tidak mungkin dicapai.

Tampilan font variabel untuk bahasa China, Jepang, dan Korea (CJK) dengan lebar font yang berbeda.

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.

Tata letak untuk teks bahasa Jepang menggunakan JUSTIFICATION_MODE_NONE.
Tata letak untuk teks bahasa Inggris menggunakan JUSTIFICATION_MODE_NONE.


Tata letak untuk teks bahasa Jepang menggunakan JUSTIFICATION_MODE_INTER_WORD.
Tata letak untuk teks bahasa Inggris menggunakan JUSTIFICATION_MODE_INTER_WORD.


Tata letak untuk teks bahasa Jepang menggunakan JUSTIFICATION_MODE_INTER_CHARACTER.
Tata letak untuk teks bahasa Inggris menggunakan JUSTIFICATION_MODE_INTER_CHARACTER.

Konfigurasi baris baru otomatis

Android started supporting phrase-based line breaks for Japanese and Korean in Android 13 (API level 33). However, while phrase-based line breaks improve the readability of short lines of text, they don't work well for long lines of text. In Android 15, apps can apply phrase-based line breaks only for short lines of text, using the LINE_BREAK_WORD_STYLE_AUTO option. This option selects the best word style option for the text.

For short lines of text, phrase-based line breaks are used, functioning the same as LINE_BREAK_WORD_STYLE_PHRASE, as shown in the following image:

For short lines of text, LINE_BREAK_WORD_STYLE_AUTO applies phrase-based line breaks to improve the readability of the text. This is the same as applying LINE_BREAK_WORD_STYLE_PHRASE.

For longer lines of text, LINE_BREAK_WORD_STYLE_AUTO uses a no line-break word style, functioning the same as LINE_BREAK_WORD_STYLE_NONE, as shown in the following image:

For long lines of text, LINE_BREAK_WORD_STYLE_AUTO applies no line-break word style to improve the readability of the text. This is the same as applying 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.

Kerucut VideoLAN Hak Cipta (c) 1996-2010 VideoLAN. Logo ini atau versi yang dimodifikasi dapat digunakan atau diubah oleh siapa saja untuk merujuk ke project VideoLAN atau produk apa pun yang dikembangkan oleh tim VideoLAN, tetapi tidak menunjukkan dukungan dari 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 dari Hewlett Packard Enterprise yang digunakan atas izin dari Khronos.