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
Arka plandaki uygulamalar, neredeyse her durumda doğrudan bir etkinliği başlatmak yerine kullanıcıya acil bilgi vermek için zamana duyarlı bildirimler göstermelidir. Gelen telefon aramalarını veya etkin alarm saatlerini ele alma gibi bildirimler bu kapsamdadır.
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 bildirim gönderen uygulamaları görebilir. Kullanıcı bu ekrandan bildirim tercihlerini kontrol edebilir.
Uygulamalar ne zaman etkinlik başlatabilir?
Android 10 veya sonraki sürümlerde çalışan uygulamalar, aşağıdaki koşullardan biri veya daha fazlası karşılandığında etkinlikleri başlatabilir:
- Uygulamada, ön planda bir etkinlik gibi görünür bir pencere 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ılırken 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
.
Uygulamada, farklı ve görünür bir uygulamaya bağlı bir hizmet var. Arka plandaki uygulamanın etkinlikleri başarıyla başlatabilmesi için hizmete bağlı uygulamanın 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ı ve 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.
Beklemedeki amacın göndereni tarafından
Android 14 veya sonraki sürümleri hedefleyen ve 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, yalnızca uygulama geliştiricisi uygulamanın bir etkinlik başlatacağını biliyorsa yapılmalıdır.
Etkinleştirmek için uygulama, PendingIntent.send()
veya benzer yöntemlere setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
ile bir ActivityOptions
paketi göndermelidir.
PendingIntent'in Oluşturucusu 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
, uygulama oluşturma işleminin görünür olduğu 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