Etkinliklerin arka planda başlatılmasıyla ilgili kısıtlamalar

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ızca finish() ç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.

  • 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 bildirimPendingIntent 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 ve SECRET_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 intent tablosu
Şekil 1: Arka plan etkinliği başlatma işlemleri için karar akışı.

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: