Android 10 (API düzeyi 29) ve daha sonraki sürümlerde uygulama arka planda çalışırken etkinlikleri ne zaman başlatabileceğiyle ilgili kısıtlamalar. Bu kısıtlamalar, kullanıcının kesintileri en aza indirir ve ekranda gösterilenler üzerinde daha fazla kontrol sahibi olmalarını sağlar.
Bu kılavuzda, etkinliklere arka plandan başlamak için alternatif olarak bildirimler gösterilmektedir. Ayrıca, kısıtlamanın geçerli olmadığı belirli durumlar da listelenir.
Bunun yerine bildirimler göster
Neredeyse her durumda, arka plandaki uygulamalar doğrudan bir etkinlik başlatmak yerine kullanıcıya acil bilgi sağlamak için zamana duyarlı bildirimler görüntülemelidir. Bu bildirimler, gelen telefon araması veya etkin bir alarm saati işlemeyi içerir.
Bu bildirime dayalı uyarı ve hatırlatma sistemi, kullanıcılara birçok avantaj sağlar:
- Kullanıcı cihazı kullanırken, yanıt vermesine olanak tanıyan bir uyarı bildirimi görür. Kullanıcı, mevcut bağlamını korur ve ekranda gördüğü içerik üzerinde kontrol sahibidir.
- Zamana duyarlı bildirimler, kullanıcının Rahatsız Etmeyin kurallarına uyar. Örneğin, kullanıcılar Rahatsız Etmeyin modu etkinken yalnızca belirli kişilerden veya tekrar arayanlardan gelen aramalara izin verebilir.
- Cihazın ekranı kapalıyken tam ekran intent işlemi hemen başlatılır.
- Kullanıcı, cihazın Ayarlar ekranında belirli bildirim kanallarından gelenler de dahil olmak üzere son zamanlarda hangi uygulamaların bildirim gönderdiğini görebilir. Kullanıcılar bu ekrandan bildirim tercihlerini kontrol edebilir.
Uygulamalar ne zaman etkinlik başlatabilir?
Android 10 veya sonraki bir sürümde çalışan uygulamalar, aşağıdaki koşullardan biri veya daha fazlası karşılandığında etkinlik başlatabilir:
- Uygulamanın görünür bir penceresi (ör. ön plandaki bir etkinlik) olmalıdır.
- Uygulamanın ön plan görevinin arka yığınında bir etkinliği vardır.
Uygulamanın Son Kullanılanlar ekranındaki mevcut bir görevin arka yığınında bir etkinliği vardır.
Uygulamada çok kısa süre önce başlatılan bir etkinlik var.
finish()
adlı uygulama, kısa süre önce bir etkinlikte bulundu. Bu durum yalnızcafinish()
çağrıldığı sırada uygulamanın ön planda bir etkinliği veya ön plan görevinin arka yığınında bir etkinliği olduğunda geçerlidir.Uygulama, sisteme bağlı aşağıdaki hizmetlerden birine sahip. Bu hizmetlerin bir kullanıcı arayüzü başlatması gerekebilir.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(Android 14 (API düzeyi 34) ve sonraki sürümlerde geçerli değildir)VoiceInteractionService
VrListenerService
.
Uygulama farklı, görünür bir uygulamaya bağlı bir hizmete sahip. Hizmete bağlı uygulamanın, etkinlikleri başarılı bir şekilde başlatabilmesi için arka planda görünür durumda kalması gerekir.
Uygulama, sistemden bir bildirim
PendingIntent
alır. Hizmetler ve yayın alıcıları için bekleyen amaçlar varsa uygulama, beklemedeki amaç gönderildikten sonra birkaç saniyeliğine etkinlikleri başlatabilir.Uygulama farklı ve görünür bir uygulamadan gönderilen
PendingIntent
alır.Uygulama, bir kullanıcı arayüzü başlatmasının beklendiği bir sistem yayını alır. Örnek olarak şunlar verilebilir:
ACTION_NEW_OUTGOING_CALL
veSECRET_CODE_ACTION
. Uygulama, yayın gönderildikten sonra birkaç saniye süreyle etkinlikleri başlatabilir.Uygulama,
CompanionDeviceManager
API'si aracılığıyla bir tamamlayıcı donanım cihazıyla ilişkilendirilir. Bu API, kullanıcının eşlenmiş bir cihazda gerçekleştirdiği işlemlere yanıt olarak uygulamanın etkinlik başlatmasını sağlar.Uygulama, cihaz sahibi modunda çalışan bir cihaz politikası denetleyicidir. Örnek kullanım alanları arasında tümüyle yönetilen kurumsal cihazların yanı sıra dijital tabela ve kiosk gibi özel cihazlar yer alır.
Uygulamaya kullanıcı tarafından
SYSTEM_ALERT_WINDOW
izni verildi.
PendingIntent'lerden etkinlik başlatırken etkinleştirilmesi gerekir
Yanlışlıkla Etkinlik başlatmaya izin vermemek için listelenen koşullara göre, Android 14'ten itibaren Etkinlik başlangıcı için bir uygulama izni vermeyi etkinleştirmenize veya devre dışı bırakmanıza olanak tanıyan açık API'ler vardır.
Android 15 veya sonraki sürümleri hedefleyen uygulamalar, artık oluşturdukları PendingIntents
öğesine arka plan etkinliği başlatma ayrıcalıklarını açıkça vermeyecek.
Açık bir şekilde kaydolmak gerekir. Bunun için sunulan seçenekler, uygulamanın PendingIntents
gönderiyor veya PendingIntents
oluşturduğuna bağlı olarak seçeneklerdir.
PendingIntent'in Göndereni Tarafından
Android 14 veya sonraki bir sürümü hedefleyen ve PendingIntent
başlatmak isteyen uygulamalar
- listelenen koşulları yerine getirme ve
- bu istisnalara göre arka planda etkinlik başlatmaya izin vermeyi etkinleştir
Bu etkinleştirme yalnızca uygulama geliştiricisi, uygulamanın bir Etkinlik başlatacağını biliyorsa yapılmalıdır.
Bu özelliği etkinleştirmek için uygulamanın PendingIntent.send()
veya benzer yöntemlere
setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
içeren bir ActivityOptions
paketi iletmesi gerekir.
PendingIntent'in İçerik Üreticisi tarafından
PendingIntent
oluşturan ve Android 15 veya sonraki sürümleri hedefleyen uygulamalar, PendingIntents
listelenen koşullar altında başlatılabilmesini istiyorsa arka plan etkinliğinin başlatılmasına artık açıkça izin vermelidir.
Çoğu durumda, PendingIntent
kaydını başlatan uygulama, etkinleştirilecek uygulama olmalıdır.
Ancak, uygulama geliştiren uygulamanın şu ayrıcalıkları vermesi gerekiyorsa:
PendingIntent
, oluşturma uygulaması görünür olduğunda herhangi bir zamanda başlatılabilir.- Oluşturma uygulamasının özel ayrıcalıkları varsa
PendingIntent
herhangi bir zamanda başlatılabilir.
Etkinleştirmek için uygulamanın, PendingIntent.getActivity()
veya benzer yöntemlere
setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
içeren bir ActivityOptions
paketi iletmesi gerekir.
Daha fazla bilgi için ilgili referans belgelerini okuyun:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode