Etkinlikleri 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 yapılan etkinliklere izin vermemek amacıyla, Android 14'ten itibaren etkinlik başlatma işlemleri için uygulama izni verme seçeneğini etkinleştirmenize veya devre dışı bırakmanıza olanak tanıyan açık API'ler listelenen koşullara göre başlar.

Şu konulara göz atın:

  • ActivityOptions.setPendingIntentBackgroundActivityStartMode
  • ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode

PendingIntent'in Göndereni Tarafından

Android 14 veya sonraki bir sürümü hedefleyen ve PendingIntent başlatmak isteyen uygulamalar

  • listelenen şartları 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.

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, Android 15 veya sonraki sürümleri hedefleyen uygulamalar

  • listelenen şartları yerine getirme ve
  • bu istisnalara göre arka planda etkinlik başlatmaya izin vermeyi etkinleştir

Çoğu durumda, etkinleştirilecek uygulama PendingIntent işlemini başlatan uygulama olmalıdır.

PendingIntent öğesini oluşturan uygulama etkinleştirdiğinde aşağıdakiler gerçekleşir:

  • PendingIntent, oluşturma uygulaması görünür olduğunda herhangi bir zamanda başlatılabilir
  • Oluşturan uygulamanın özel ayrıcalıkları varsa PendingIntent her zaman başlatılabilir

Dolayısıyla, bu tür bir PendingIntent öğesini güvenilmeyen bir uygulamaya geçirmemek ve artık kullanılmaması gerektiğinde PendingIntent öğesini iptal etmek iyi bir uygulamadır.

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.