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 pengguna menolak izin notifikasi, mereka tetap melihat notifikasi yang terkait dengan layanan latar depan ini di Pengelola Tugas Layanan Latar Depan (FGS) tetapi tidak melihatnya di panel samping notifikasi.

Izin runtime baru untuk perangkat Wi-Fi di sekitar

Pada versi Android sebelumnya, pengguna perlu memberikan izin ACCESS_FINE_LOCATION untuk menyelesaikan beberapa kasus penggunaan Wi-Fi umum yang terkait dengan hotspot, Sambungan Wi-Fi Langsung, Wi-Fi RTT, dan banyak lagi.

Dengan alasan sulit bagi pengguna untuk mengaitkan izin akses lokasi dengan fungsi Wi-Fi, Android 13 (API level 33) memperkenalkan izin runtime baru 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 ini.

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. 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 izin perangkat Wi-Fi di sekitar lebih lanjut.

Izin media terperinci

Dua 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 Anda menargetkan Android 13, Anda harus meminta satu atau beberapa izin baru, bukan izin READ_EXTERNAL_STORAGE dan WRITE_EXTERNAL_STORAGE.

Kumpulan izin yang Anda minta bergantung pada jenis media yang harus diakses oleh aplikasi Anda:

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

Jika sebelumnya pengguna telah memberi aplikasi Anda izin READ_EXTERNAL_STORAGE, sistem akan secara otomatis memberikan setiap izin baru ke aplikasi Anda.

Jika tidak, sistem akan menampilkan dialog yang muncul untuk pengguna saat aplikasi meminta izin apa pun yang ditampilkan dalam tabel sebelumnya. Pada gambar 1, aplikasi 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.

Langkah migrasi saat Anda menargetkan Android 13

Setelah menargetkan Android 13, deklarasikan izin media yang diperlukan aplikasi Anda. Untuk mempertahankan kompatibilitas dengan Android versi lama, deklarasikan izin READ_EXTERNAL_STORAGE saat menetapkan maxSdkVersion ke 32, seperti yang ditunjukkan dalam cuplikan kode berikut:

<manifest ...>
    <!-- Required only if your app targets Android 13. -->
    <!-- Declare one or more the following permissions only if your app needs
    to access data that's protected by them. -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />

    <!-- Required to maintain app compatibility. -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
                     android:maxSdkVersion="32" />
    <application ...>
        ...
    </application>
</manifest>

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.

Keamanan

Filter intent memblokir intent yang tidak cocok

Saat aplikasi Anda mengirimkan intent ke komponen aplikasi lain yang diekspor dan menargetkan Android 13 atau yang lebih tinggi, intent tersebut akan dikirim jika dan hanya jika cocok dengan elemen <intent-filter> di aplikasi penerima. Intent yang tidak cocok akan diblokir.

Pengecualian jika pencocokan intent tidak diterapkan:

  • Intent yang dikirim ke komponen yang tidak mendeklarasikan filter intent apa pun.
  • Intent yang berasal dari dalam aplikasi yang sama.
  • Intent yang berasal dari sistem; yaitu, intent yang dikirim dari "UID sistem" (uid=1000). Aplikasi sistem mencakup system_server dan aplikasi yang menyetel android:sharedUserId ke android.uid.system.
  • Intent yang berasal dari root.

Jika aplikasi penerima mengupgrade ke Android 13 atau yang lebih baru, semua intent yang berasal dari aplikasi eksternal akan dikirimkan ke komponen yang diekspor, jika dan hanya jika cocok dengan elemen <intent-filter> yang dideklarasikannya, apa pun versi SDK target aplikasi pengirimnya.

Performa dan baterai

Pemakaian Resource Baterai

Jika pengguna menempatkan aplikasi Anda dalam status "dibatasi" untuk penggunaan baterai di latar belakang sementara aplikasi Anda menargetkan Android 13, sistem akan menerapkan beberapa batasan terkait siaran.

Pelajari lebih lanjut batasan baru untuk penggunaan baterai di latar belakang yang dibatasi di halaman yang menjelaskan fitur Pemakaian Resource Baterai yang diperkenalkan di Android 13.

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.