Tam alarm planlama varsayılan olarak reddedilir

Tam alarmlar, kullanıcıların bilinçli olarak davranması gereken bildirimler veya işlemler için kullanılır. gerçekleşmesidir.

SCHEDULE_EXACT_ALARM, Android 12'de kullanıma sunulan izinle tam alarm planlama özelliği, artık yeni yüklenen çoğu cihaza önceden Android 13 ve sonraki sürümleri hedefleyen uygulamalar (varsayılan olarak "reddedildi" şeklinde ayarlanır). Eğer Kullanıcı, uygulama verilerini Android 14 çalıştıran bir cihaza yedekleme ve geri yükleme işlemini gerçekleştirirseniz izin reddedilecektir. Bir mevcut bir uygulama bu izne zaten sahipse Android 14'e yükseltme.

Tam alarm başlatmak için SCHEDULE_EXACT_ALARM izni gerekir şu API'ler aracılığıyla gerçekleştirilir veya bir SecurityException atılır:

ziyaret edin.

SCHEDULE_EXACT_ALARM izni için mevcut en iyi uygulamalar aşağıdakiler dahil geçerlidir:

Bu durumdan etkilenen uygulamalar

Android 14 veya sonraki bir sürümü çalıştıran cihazlarda bu değişiklik, yeni bir aşağıdaki özelliklere sahip yüklü uygulama:

  • Android 13 (API düzeyi 33) veya sonraki sürümleri hedefler.
  • Manifest dosyasında SCHEDULE_EXACT_ALARM iznini tanımlar.
  • Muafiyet veya ön erişim kapsamında değilse senaryoyu izler.
  • Takvim veya çalar saat uygulaması değilse.

Takvim ve çalar saat uygulamalarında USE_EXACT_ALARM değeri belirtilmelidir

Takvim veya çalar saat uygulamalarının takvim hatırlatıcıları, uyandırma göndermesi gerekir uygulama durdurulduğunda uyarı gönderir. Bu uygulamalar şunları isteyebilir: USE_EXACT_ALARM normal izin. USE_EXACT_ALARM izni, ve yükleme sırasında izin verilir ve bu izne sahip olan uygulamalar, tam alarmlarla aynı SCHEDULE_EXACT_ALARM izni olan uygulamalarda.

Tam alarm gerektirmeyen kullanım alanları

Çünkü SCHEDULE_EXACT_ALARM izni artık varsayılan olarak reddedilmiştir ve kullanıcıların ek adımlar gerçekleştirmesi gerekir. Geliştiriciler de kullanım alanlarını değerlendirmeye ve tam alarmın doğru olup olmadığını belirlemeye daha mantıklı olabilir.

Aşağıdaki listede tam alarm gerektirmeyen yaygın iş akışları gösterilmektedir:

Uygulamanızın kullanım süresi boyunca tekrarlanan işleri planlama
Görevin anlık olarak takip edilmesi gerekiyorsa set() yöntemi kullanışlıdır örneğin 14:00’te ya da 30 dakika içinde çalacak Aksi takdirde, postAtTime() veya postDelayed() yöntemlerini kullanın.
Uygulamanızı güncelleme ve günlükleri yükleme gibi planlı arka plan çalışmaları
WorkManager, zamanlama açısından hassas periyodik işler programlamak için bir yöntem sunar. Bir sonraki aşamaya geçmeden önce tekrarlama aralığı ve flexInterval (en az 15 dakika) ayrıntılı bir çalışma zamanı tanımlar.
Alarmın sistem boştayken yaklaşık bir zamanda çalması gerekir
Tam olmayan alarm kullanma. Özellikle setAndAllowWhileIdle() numaralı telefonu arayın.
Belirli bir sürenin sonunda yapılması gereken, kullanıcı tarafından belirtilen işlem
Tam olmayan alarm kullanma. Özellikle set() numaralı telefonu arayın.
Belirli bir zaman aralığında gerçekleşebilecek, kullanıcı tarafından belirtilen işlem
Tam olmayan alarm kullanma. Özellikle setWindow() numaralı telefonu arayın. Lütfen izin verilen en küçük pencere uzunluğu 10 dakikadır.

Tam alarmları kullanmaya devam etmek için taşıma adımları

Uygulamalar en azından, Google'dan önce izinlerinin olup olmadığını tam alarm planlama. İzni olmayan uygulamaların izin istemesi gerekir bir amaç çağırarak kullanıcıdan uzaklaştırırsınız.

Bu, özel bir özel istek isteği göndermek için kullanılan standart iş akışıyla izin:

  1. Uygulamalar onaylamak için AlarmManager.canScheduleExactAlarms() numarasını aramalıdır ve gerekli izne sahip olduğunu doğrulamalısınız.
  2. Uygulamanın izni yoksa şunu içeren bir intent çağırın: Uygulama paketiyle birlikte ACTION_REQUEST_SCHEDULE_EXACT_ALARM adını girin.

    Uygulamanızın onResume() yönteminde kullanıcının kararını kontrol edin uygulamasını indirin.

  3. Şunu dinle: AlarmManager.ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED kullanıcının izin vermesi durumunda gönderilen yayınlar.

  4. Kullanıcı, uygulamanıza izin verdiyse, uygulamanız tam olarak alarmlar. Kullanıcı bunun yerine izni reddettiyse yazılımdaki kullanıcı deneyimi sunarak söz konusu izinle korunan bilgilere erişememektedir.

Aşağıdaki kod snippet'i, SCHEDULE_EXACT_ALARM izin:

val alarmManager: AlarmManager = context.getSystemService<AlarmManager>()!!
when {
   // If permission is granted, proceed with scheduling exact alarms.
   alarmManager.canScheduleExactAlarms() -> {
       alarmManager.setExact(...)
   }
   else -> {
       // Ask users to go to exact alarm page in system settings.
       startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
   }
}

İzni kontrol etmek ve kullanıcının kararlarını onResume():

override fun onResume() {
     
   if (alarmManager.canScheduleExactAlarms()) {
       // Set exact alarms.
       alarmManager.setExact(...)
   }
   else {
       // Permission not yet approved. Display user notice and revert to a fallback  
       // approach.
       alarmManager.setWindow(...)
   }
}

Reddedilen izin durumunda düzgün bir şekilde düzeyi düşür

Bazı kullanıcılar izin vermeyi reddeder. Bu senaryoda, kötü amaçlı yazılıma sahip olan ve bununla birlikte mümkün olan en iyi kullanım alanlarını belirleyerek yedek kullanıcı deneyiminden yararlanabilirsiniz.

Muafiyetler

Aşağıdaki uygulama türlerinin setExact() veya setExactAndAllowWhileIdle() yöntem:

  • Platform sertifikasıyla imzalanmış uygulamalar.
  • Ayrıcalıklı uygulamalar.
  • Güç izin verilenler listesindeki uygulamalar (uygulamanız şartlara uygunsa bunu isteyebilirsiniz ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS intent işlemi).

Ön bağışlar

Test yönergeleri

Bu değişikliği test etmek için Alarmlar ve hatırlatıcılar izni Sistem ayarlarındaki Özel uygulama erişimi sayfasından (Ayarlar > Uygulamalar > Özel uygulama erişimi > Alarmlar ve hatırlatıcıları) tıklayın ve uygulamanızın davranışını gözlemleyin.