Android 10 (API düzeyi 29) ve sonraki sürümlerde, uygulama arka planda çalışırken etkinlikleri ne zaman başlatabileceğine dair kısıtlamalar uygulanır. Bu kısıtlamalar, kullanıcının kesintiye uğramasını en aza indirmeye ve ekranında gösterilenlerle ilgili daha fazla kontrol sahibi olmasına yardımcı olur.
Bu kılavuzda, etkinlikleri arka plandan başlatmak için alternatif olarak bildirimler sunulmaktadır. Ayrıca, kısıtlamanın geçerli olmadığı belirli durumları da listeler.
Bunun yerine bildirimleri görüntüle
Neredeyse her durumda, arka plandaki uygulamaların doğrudan bir etkinliği başlatmak yerine kullanıcıya acil bilgiler sağlamak için zamana duyarlı bildirimler göstermesi gerekir. Bu bildirimlere örnek olarak, gelen bir telefon aramasını veya etkin bir alarm saatini yönetme dahildir.
Bildirime dayalı uyarı ve hatırlatma sistemi kullanıcılara çeşitli avantajlar 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 hemen başlatılır.
- Kullanıcı cihazın Ayarlar ekranında, belirli bildirim kanalları da dahil olmak üzere son zamanlarda hangi uygulamaların bildirim gönderdiğini görebilir. Kullanıcı bu ekrandan bildirim tercihlerini kontrol edebilir.
Uygulamaların etkinlikleri başlatabileceği durumlar
Android 10 veya sonraki bir sürümde çalışan uygulamalar, aşağıdaki koşullardan biri veya daha fazlası karşılandığında etkinlikleri başlatabilir:
- Uygulamanın, ön plandaki bir etkinlik gibi görünür bir penceresi vardır.
- Uygulama, ön plan görevinin arka yığınında bir etkinliğe sahip.
Uygulama, Son aramalar ekranındaki mevcut bir görevin arka yığınında bir etkinliğe sahiptir.
Uygulamada çok yakın zamanda başlayan bir etkinlik var.
finish()
adlı uygulama kısa süre önce etkinlik gerçekleştirdi. Bu durum yalnızcafinish()
çağrıldığında uygulamanın ön planda 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
.
Uygulamada farklı, görünür bir uygulamaya bağlı bir hizmet var. Hizmete bağlı uygulamanın, etkinlikleri başarılı bir şekilde başlatması için arka planda uygulama tarafından görünür kalması gerekir.
Uygulama, sistemden bir bildirim
PendingIntent
alır. Hizmetler ve yayın alıcıları için bekleyen intent'ler söz konusu olduğunda, uygulama bekleyen intent gönderildikten sonra birkaç saniye boyunca etkinlikleri başlatabilir.Uygulama, farklı, görünür bir uygulamadan gönderilen bir
PendingIntent
alır.Uygulama, kullanıcı arayüzü başlatmasının beklendiği bir sistem yayını alır. Örnekler:
ACTION_NEW_OUTGOING_CALL
veSECRET_CODE_ACTION
. Uygulama, yayın gönderildikten birkaç saniye sonra etkinlikleri başlatabilir.Uygulama,
CompanionDeviceManager
API'si aracılığıyla bir tamamlayıcı donanım cihazıyla ilişkilendirilmiş olmalıdır. Bu API, kullanıcının eşlenen bir cihazda gerçekleştirdiği işlemlere yanıt olarak uygulamanın etkinlikleri başlatmasına olanak tanır.Uygulama, cihaz sahibi modunda çalışan bir cihaz politikası denetleyicisidir. Örnek kullanım alanları arasında tam yönetilen kurumsal cihazlar ve dijital tabelalar ile kiosklar gibi özel cihazlar yer alır.
Uygulamaya kullanıcı tarafından
SYSTEM_ALERT_WINDOW
izni verilir.
PendingIntent'lerden etkinlik başlatırken etkinleştirme gerekli
Listelenen koşullara göre yanlışlıkla etkinlik başlatmaya izin vermemek için Android 14'ten itibaren, uygulamaya etkinlik başlatma izni verme veya vermeme seçeneğini sunan açık API'ler vardır.
Android 15 veya sonraki sürümleri hedefleyen uygulamalar, varsayılan olarak artık oluşturdukları PendingIntents
'lere arka plan etkinliği başlatma (BAL) ayrıcalıklarını dolaylı olarak vermeyecektir. Açık bir şekilde etkinleştirme gereklidir. Bunu yapmak için uygulamanın PendingIntents
gönderip göndermediğine bağlı olarak aşağıdaki seçenekler mevcuttur.
PendingIntent'in Göndereni tarafından
Android 14 veya sonraki sürümleri hedefleyen ve bir PendingIntent
başlatmak isteyen uygulamalar
- Listelenen koşulları ve
- Bu istisnalara göre arka plan etkinliği başlatmaya izin vermek için etkinleştirme
Bu etkinleştirme işlemi yalnızca uygulama geliştiricisi, uygulamanın bir Etkinlik başlatacağını biliyorsa gerçekleştirilmelidir.
Etkinleştirmek için uygulamanın PendingIntent.send()
veya benzer yöntemlere setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
ile bir ActivityOptions
paketi göndermesi gerekir.
PendingIntent'in İçerik Üreticisi Tarafından
Android 15 veya sonraki sürümleri hedefleyen ve PendingIntent
oluşturan uygulamalar, PendingIntents
'ların listelenen koşullar altında başlatılabilmesini istiyorsa artık arka plan etkinliği başlatmaya izin vermek için açıkça etkinleştirme yapmalıdır.
Çoğu durumda, PendingIntent
etkinliğini başlatan uygulamanın etkinleştirme işlemini yapması gerekir.
Ancak, oluşturan uygulamanın bu ayrıcalıkları vermesi gerekiyorsa:
PendingIntent
, uygulamayı oluşturan kullanıcının uygulamayı görebileceği her zaman başlatılabilir.- Oluşturan uygulamanın özel ayrıcalıkları varsa
PendingIntent
herhangi bir zamanda başlatılabilir.
Etkinleştirmek için uygulama, setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
içeren bir ActivityOptions
paketini PendingIntent.getActivity()
veya benzer yöntemlere iletmelidir.
Daha fazla ayrıntı için ilgili referans dokümanlarını okuyun:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode