Perubahan perilaku: Aplikasi yang menargetkan Android 13 atau yang lebih tinggi

Seperti rilis sebelumnya, Android 13 menyertakan perubahan perilaku yang dapat memengaruhi aplikasi Anda. Perubahan perilaku berikut ini berlaku khusus bagi aplikasi yang menargetkan Android 13 atau yang lebih tinggi. Jika aplikasi menargetkan Android 13 atau yang lebih tinggi, Anda harus memodifikasi aplikasi untuk mendukung perilaku ini dengan benar, jika berlaku.

Pastikan Anda meninjau daftar perubahan perilaku yang memengaruhi semua aplikasi yang berjalan di Android 13.

Privasi

Izin notifikasi memengaruhi tampilan layanan latar depan

Jika menolak izin notifikasi, pengguna tidak akan melihat notifikasi yang terkait dengan layanan latar depan di panel samping notifikasi. Namun, pengguna tetap melihat notifikasi yang terkait dengan layanan latar depan di Pengelola Tugas, terlepas dari apakah izin notifikasi diberikan atau tidak.

Izin runtime baru untuk perangkat Wi-Fi di sekitar

Pada versi Android sebelumnya, pengguna perlu memberikan izin ACCESS_FINE_LOCATION pada aplikasi untuk menyelesaikan beberapa kasus penggunaan Wi-Fi umum.

Dengan alasan sulit bagi pengguna untuk mengaitkan izin akses lokasi dengan fungsi Wi-Fi, Android 13 (API level 33) memperkenalkan izin runtime dalam grup izin NEARBY_DEVICES untuk aplikasi yang mengelola koneksi perangkat ke titik akses di sekitar melalui Wi-Fi. Izin ini, NEARBY_WIFI_DEVICES, memenuhi kasus penggunaan Wi-Fi seperti berikut:

  • Menemukan atau menghubungkan ke perangkat di sekitar, seperti printer atau perangkat transmisi media. Alur kerja ini memungkinkan aplikasi Anda menyelesaikan tugas semacam ini:
    • Menerima informasi AP di luar band, seperti melalui BLE.
    • Menemukan dan menghubungkan ke perangkat melalui Wi-Fi Aware dan menghubungkannya menggunakan hotspot khusus lokal.
    • Menemukan dan menghubungkan ke perangkat melalui Wi-Fi Langsung.
  • Memulai koneksi ke SSID yang dikenal, seperti mobil atau perangkat smart home.
  • Memulai hotspot khusus lokal.
  • Mendekatkan ke perangkat Wi-Fi Aware di sekitar.

Selama aplikasi Anda tidak memperoleh informasi lokasi fisik dari API Wi-Fi, mintalah NEARBY_WIFI_DEVICES, bukan ACCESS_FINE_LOCATION saat Anda menargetkan Android 13 atau yang lebih tinggi dan gunakan API Wi-Fi. Saat Anda mendeklarasikan izin NEARBY_WIFI_DEVICES, tegaskan bahwa aplikasi Anda tidak pernah memperoleh informasi lokasi fisik dari API Wi-Fi. Untuk melakukannya, tetapkan atribut android:usesPermissionFlags ke neverForLocation. Proses ini serupa dengan yang Anda lakukan di Android 12 (API level 31) dan yang lebih tinggi saat Anda menegaskan bahwa informasi perangkat Bluetooth tidak pernah digunakan untuk lokasi.

Pelajari lebih lanjut cara meminta izin untuk mengakses perangkat Wi-Fi di sekitar.

Izin media terperinci

2 tombol untuk dialog, dari atas ke bawah, adalah Izinkan dan
  Jangan izinkan
Gambar 1. Dialog izin sistem yang dilihat pengguna saat Anda meminta izin READ_MEDIA_AUDIO.

Jika aplikasi menargetkan Android 13 atau yang lebih tinggi dan harus mengakses file media yang telah dibuat oleh aplikasi lain, Anda harus meminta satu atau beberapa izin media terperinci berikut, bukan izin READ_EXTERNAL_STORAGE:

Jenis media Izin meminta
Gambar dan foto READ_MEDIA_IMAGES
Video READ_MEDIA_VIDEO
File audio READ_MEDIA_AUDIO

Sebelum mengakses file media aplikasi lain, pastikan pengguna telah memberikan izin media terperinci yang sesuai ke aplikasi Anda.

Gambar 1 menunjukkan aplikasi yang meminta izin READ_MEDIA_AUDIO.

Jika Anda meminta izin READ_MEDIA_IMAGES dan izin READ_MEDIA_VIDEO secara bersamaan, hanya satu dialog izin sistem yang akan muncul.

Jika aplikasi Anda sebelumnya diberi izin READ_EXTERNAL_STORAGE, setiap izin READ_MEDIA_* yang diminta akan otomatis diberikan saat upgrade. Anda dapat menggunakan perintah ADB berikut untuk meninjau izin yang diupgrade:

adb shell cmd appops get --uid PACKAGE_NAME

Penggunaan sensor tubuh di latar belakang memerlukan izin baru

Android 13 memperkenalkan konsep akses "saat digunakan" untuk sensor tubuh, seperti detak jantung, suhu, dan persentase oksigen darah. Model akses ini sangat mirip dengan yang diperkenalkan oleh sistem untuk lokasi di Android 10 (API level 29).

Jika aplikasi Anda menargetkan Android 13 dan memerlukan akses ke informasi sensor tubuh saat berjalan di latar belakang, Anda harus mendeklarasikan izin BODY_SENSORS_BACKGROUND yang baru selain izin BODY_SENSORS yang ada.

Performa dan baterai

Pemakaian Resource Baterai

Jika pengguna menempatkan aplikasi Anda dalam status "dibatasi" untuk penggunaan baterai di latar belakang saat aplikasi Anda menargetkan Android 13, sistem tidak akan mengirimkan siaran BOOT_COMPLETED atau siaran LOCKED_BOOT_COMPLETED hingga aplikasi dimulai karena alasan lain.

Pengalaman pengguna

Kontrol media berasal dari PlaybackState

Untuk aplikasi yang menargetkan Android 13 (API level 33) dan versi lebih tinggi, sistem memperoleh kontrol media dari tindakan PlaybackState. Hal ini memungkinkan sistem untuk menampilkan kumpulan kontrol yang lebih beragam dan secara teknis konsisten antara perangkat ponsel dan tablet, dan juga selaras dengan cara kontrol media dirender di platform Android lain seperti Android Auto dan Android TV.

Gambar 2 menunjukkan contoh tampilannya di perangkat ponsel dan tablet.

Dalam hal tampilannya di perangkat ponsel dan tablet, kontrol media
            menggunakan contoh jalur sampel yang menunjukkan tampilan tombol
Gambar 2: Kontrol media di perangkat ponsel dan tablet

Sebelum Android 13, sistem menampilkan hingga lima tindakan dari notifikasi MediaStyle sesuai urutan ketika ditambahkan. Dalam mode ringkas—misalnya, dalam setelan cepat yang diciutkan—hingga tiga tindakan yang ditentukan dengan setShowActionsInCompactView() dapat ditampilkan.

Mulai Android 13, sistem menampilkan hingga lima tombol tindakan berdasarkan PlaybackState seperti yang dijelaskan dalam tabel berikut. Dalam mode ringkas, hanya tiga slot tindakan pertama yang akan ditampilkan. Untuk aplikasi yang tidak menargetkan Android 13 atau yang tidak menyertakan PlaybackState, sistem akan menampilkan kontrol berdasarkan daftar Action yang ditambahkan ke notifikasi MediaStyle sebagaimana yang telah dijelaskan di paragraf sebelumnya.

Slot Tindakan Kriteria
1 Putar Status PlaybackState saat ini adalah salah satu dari berikut:
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
Memuat indikator lingkaran berputar Status PlaybackState saat ini adalah salah satu dari berikut:
  • STATE_CONNECTING
  • STATE_BUFFERING
Jeda Status PlaybackState saat ini bukan satu pun dari yang disebutkan di atas.
2 Sebelumnya Tindakan PlaybackState menyertakan ACTION_SKIP_TO_PREVIOUS.
Kustom Tindakan PlaybackState tidak menyertakan ACTION_SKIP_TO_PREVIOUS, dan tindakan kustom PlaybackState menyertakan tindakan kustom yang belum dilakukan.
Kosong Tambahan PlaybackState menyertakan nilai boolean true untuk kunci SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV.
3 Berikutnya Tindakan PlaybackState menyertakan ACTION_SKIP_TO_NEXT.
Kustom Tindakan PlaybackState tidak menyertakan ACTION_SKIP_TO_NEXT, dan tindakan kustom PlaybackState menyertakan tindakan kustom yang belum dilakukan.
Kosong Tambahan PlaybackState menyertakan nilai boolean true untuk kunci SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT.
4 Kustom Tindakan kustom PlaybackState menyertakan tindakan kustom yang belum dilakukan.
5 Kustom Tindakan kustom PlaybackState menyertakan tindakan kustom yang belum dilakukan.

Tindakan kustom ditempatkan sesuai urutan penambahannya ke PlaybackState.

Tema warna aplikasi diterapkan secara otomatis ke konten WebView

Untuk aplikasi yang menargetkan Android 13 (API level 33) atau yang lebih tinggi, metode setForceDark() tidak digunakan lagi, sehingga tidak ada pengoperasian jika metode tersebut dipanggil.

Sebagai gantinya, WebView kini selalu menetapkan prefers-color-scheme kueri media sesuai dengan atribut tema aplikasi, isLightTheme. Dengan kata lain, jika isLightTheme adalah true atau tidak ditentukan, prefers-color-scheme adalah light; jika tidak, ini adalah dark. Perilaku ini berarti bahwa gaya terang atau gelap konten web diterapkan secara otomatis agar cocok dengan tema aplikasi jika konten mendukungnya.

Untuk sebagian besar aplikasi, perilaku baru ini harus menerapkan gaya aplikasi yang sesuai secara otomatis, tetapi Anda harus menguji aplikasi untuk memeriksa kasus apa pun saat Anda mungkin mengontrol setelan mode gelap secara manual.

Jika Anda masih perlu menyesuaikan perilaku tema warna aplikasi, gunakan metode setAlgorithmicDarkeningAllowed(). Untuk kompatibilitas mundur dengan versi Android sebelumnya, sebaiknya gunakan metode setAlgorithmicDarkeningAllowed() yang setara di AndroidX.

Lihat dokumentasi untuk metode tersebut guna mempelajari lebih lanjut perilaku yang dapat Anda harapkan dalam aplikasi, bergantung pada targetSdkVersion dan setelan tema aplikasi.

Konektivitas

BluetoothAdapter#enable() dan BluetoothAdapter#disable() tidak digunakan lagi

Untuk aplikasi yang menargetkan Android 13 (API level 33) atau yang lebih tinggi, metode BluetoothAdapter#enable() dan BluetoothAdapter#disable() tidak digunakan lagi dan selalu menampilkan false.

Jenis aplikasi berikut dikecualikan dari perubahan ini:

  • Aplikasi Pemilik Perangkat
  • Aplikasi Pemilik Profil
  • Aplikasi sistem

Layanan Google Play

Izin diperlukan untuk ID iklan

Aplikasi yang menggunakan ID iklan layanan Google Play dan menargetkan Android 13 (API level 33) dan yang lebih tinggi harus mendeklarasikan izin normal AD_ID dalam file manifes aplikasinya, seperti berikut:

<manifest ...>
    <!-- Required only if your app targets Android 13 or higher. -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

    <application ...>
        ...
    </application>
</manifest>

Jika aplikasi Anda tidak mendeklarasikan izin ini saat menargetkan Android 13 atau yang lebih tinggi, ID iklan akan otomatis dihapus dan diganti dengan string nol.

Jika aplikasi Anda menggunakan SDK yang mendeklarasikan izin AD_ID dalam manifes library, izin tersebut akan digabungkan dengan file manifes aplikasi secara default. Dalam hal ini, Anda tidak perlu mendeklarasikan izin di file manifes aplikasi Anda.

Untuk mempelajari lebih lanjut, lihat ID Iklan di Bantuan Konsol Play.

Pembatasan non-SDK yang diperbarui

Android 13 menyertakan daftar terbaru antarmuka non-SDK yang dibatasi berdasarkan kolaborasi dengan developer Android dan pengujian internal terbaru. Jika memungkinkan, kami akan memastikan ketersediaan alternatif publik sebelum membatasi antarmuka non-SDK.

Jika aplikasi Anda tidak menargetkan Android 13, beberapa perubahan ini mungkin tidak langsung memengaruhi Anda. Namun, meskipun saat ini Anda dapat menggunakan beberapa antarmuka non-SDK (bergantung pada API level target aplikasi Anda), penggunaan metode atau kolom non-SDK tetap sangat berisiko merusak aplikasi Anda.

Jika tidak yakin apakah aplikasi Anda menggunakan antarmuka non-SDK atau tidak, Anda dapat menguji aplikasi untuk mencari tahu. Jika aplikasi Anda mengandalkan antarmuka non-SDK, sebaiknya mulailah merencanakan migrasi ke alternatif SDK. Meskipun begitu, kami paham bahwa beberapa aplikasi memiliki kasus penggunaan yang valid untuk menggunakan antarmuka non-SDK. Jika tidak dapat menemukan alternatif penggunaan antarmuka non-SDK untuk fitur dalam aplikasi Anda, sebaiknya minta API publik baru.

Untuk mempelajari perubahan dalam rilis Android ini lebih lanjut, baca Update pembatasan antarmuka non-SDK di Android 13. Untuk mempelajari lebih lanjut antarmuka non-SDK secara umum, baca Pembatasan antarmuka non-SDK.