Aktiviteleri arka planda başlatmayla ilgili kısıtlamalar

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

  • 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 ve SECRET_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: