Android 10 (API level 29) dan yang lebih baru menerapkan batasan kapan aplikasi dapat memulai aktivitas saat aplikasi berjalan di latar belakang. Pembatasan ini membantu meminimalkan gangguan bagi pengguna dan menjaga pengguna lebih mengontrol apa yang ditampilkan di layar mereka.
Panduan ini menyajikan notifikasi sebagai alternatif untuk memulai aktivitas dari latar belakang. Panduan ini juga mencantumkan kasus khusus saat pembatasan tidak berlaku.
Tampilkan notifikasi
Dalam hampir semua kasus, aplikasi di latar belakang harus menampilkan notifikasi yang sensitif terhadap waktu untuk memberikan informasi mendesak kepada pengguna, bukan langsung memulai aktivitas. Notifikasi tersebut mencakup penanganan panggilan telepon masuk atau jam alarm aktif.
Sistem pengingat dan pemberitahuan berbasis notifikasi ini memberikan beberapa keuntungan bagi pengguna:
- Saat menggunakan perangkat, pengguna akan melihat notifikasi head-up yang memungkinkan mereka merespons. Pengguna mempertahankan konteks saat ini dan memiliki kontrol atas konten yang mereka lihat di layar.
- Notifikasi sensitif waktu sangat memperhatikan aturan Jangan Ganggu pengguna. Misalnya, pengguna mungkin hanya mengizinkan panggilan dari kontak tertentu atau dari penelepon berulang saat fitur Jangan Ganggu diaktifkan.
- Saat layar perangkat nonaktif, intent layar penuh akan segera diluncurkan.
- Di layar Setelan perangkat, pengguna dapat melihat aplikasi mana yang baru-baru ini mengirim notifikasi, termasuk dari saluran notifikasi tertentu. Dari layar ini, pengguna dapat mengontrol preferensi notifikasi mereka.
Kapan aplikasi dapat memulai aktivitas
Aplikasi yang berjalan di Android 10 atau yang lebih tinggi dapat memulai aktivitas jika satu atau beberapa kondisi berikut terpenuhi:
- Aplikasi memiliki jendela yang terlihat, seperti aktivitas di latar depan.
- Aplikasi memiliki aktivitas di data sebelumnya tugas latar depan.
Aplikasi memiliki aktivitas di data sebelumnya dari tugas yang ada di layar Terbaru.
Aplikasi ini memiliki aktivitas yang dimulai baru-baru ini.
Aplikasi memanggil
finish()
pada aktivitas baru-baru ini. Hal ini hanya berlaku jika aplikasi memiliki aktivitas di latar depan atau aktivitas di data sebelumnya tugas latar depan pada saatfinish()
dipanggil.Aplikasi ini memiliki salah satu layanan berikut yang terikat oleh sistem. Layanan ini mungkin perlu meluncurkan UI.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(Tidak berlaku di Android 14 (level API 34) dan yang lebih tinggi)VoiceInteractionService
VrListenerService
.
Aplikasi ini memiliki layanan yang terikat oleh aplikasi yang berbeda dan terlihat. Aplikasi yang terikat ke layanan harus tetap terlihat agar aplikasi di latar belakang berhasil memulai aktivitas.
Aplikasi menerima notifikasi
PendingIntent
dari sistem. Dalam hal intent yang tertunda untuk layanan dan penerima siaran, aplikasi dapat memulai aktivitas selama beberapa detik setelah intent yang tertunda dikirim.Aplikasi menerima
PendingIntent
yang dikirim dari aplikasi lain yang terlihat.Aplikasi menerima siaran sistem tempat aplikasi tersebut diharapkan untuk meluncurkan UI. Contohnya mencakup
ACTION_NEW_OUTGOING_CALL
danSECRET_CODE_ACTION
. Aplikasi ini dapat memulai aktivitas selama beberapa detik setelah siaran dikirim.Aplikasi dikaitkan dengan perangkat hardware pendamping melalui
CompanionDeviceManager
API. API ini memungkinkan aplikasi memulai aktivitas sebagai respons terhadap tindakan yang dilakukan pengguna pada perangkat yang disambungkan.Aplikasi ini adalah pengontrol kebijakan perangkat yang berjalan dalam mode pemilik perangkat. Contoh kasus penggunaannya mencakup perangkat perusahaan terkelola sepenuhnya serta perangkat khusus seperti reklame digital dan kios.
Aplikasi diberi izin
SYSTEM_ALERT_WINDOW
oleh pengguna.
Keikutsertaan diperlukan saat memulai aktivitas dari PendingIntent
Untuk menghindari dimulainya Aktivitas secara tidak sengaja berdasarkan kondisi yang tercantum, mulai Android 14, ada API eksplisit yang memungkinkan Anda memilih untuk mengaktifkan atau menonaktifkan pemberian izin aplikasi untuk dimulainya Aktivitas.
Aplikasi yang menargetkan Android 15 atau yang lebih tinggi secara default tidak lagi secara implisit
memberikan hak istimewa peluncuran aktivitas latar belakang (BAL) ke PendingIntents
yang
mereka buat. Keikutsertaan eksplisit diperlukan, untuk melakukannya, berikut adalah opsi
bergantung pada apakah aplikasi mengirim atau membuat PendingIntents
.
Oleh Pengirim PendingIntent
Aplikasi yang menargetkan Android 14 atau yang lebih tinggi yang ingin memulai PendingIntent
harus
- memenuhi kondisi yang tercantum dan
- memilih untuk mengizinkan peluncuran aktivitas latar belakang berdasarkan pengecualian tersebut
Keikutsertaan ini hanya boleh terjadi jika developer aplikasi mengetahui bahwa aplikasi akan memulai Aktivitas.
Untuk ikut serta, aplikasi harus meneruskan paket ActivityOptions
dengan
setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
ke PendingIntent.send()
atau metode serupa.
Oleh Kreator PendingIntent
Aplikasi yang menargetkan Android 15 atau yang lebih tinggi yang membuat PendingIntent
kini harus
secara eksplisit memilih ikut serta untuk mengizinkan peluncuran aktivitas latar belakang jika ingin
PendingIntents
tersebut dapat dimulai berdasarkan kondisi yang tercantum.
Pada umumnya, aplikasi yang memulai PendingIntent
harus menjadi aplikasi yang memilih ikut serta.
Namun, jika aplikasi pembuat perlu memberikan hak istimewa ini:
PendingIntent
dapat dimulai kapan saja saat aplikasi pembuat terlihat.PendingIntent
dapat dimulai kapan saja jika aplikasi pembuat memiliki hak istimewa khusus.
Untuk ikut serta, aplikasi harus meneruskan paket ActivityOptions
dengan
setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
ke
PendingIntent.getActivity()
atau metode serupa.
Baca dokumentasi referensi yang relevan untuk mengetahui detail selengkapnya:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode