Selamlar herkese,
React Native ile geliştirdiğim, cihaz ivmeölçer (accelerometer) verilerini anlık takip ederek sunucuya raporlayan bir projem var. Uygulamanın en kritik özelliği; kullanıcı uygulamayı kapatsa (swipe-away) bile arka planda sensör dinlemeye devam etmesi ve bildirim panelinde bu servisin asla kapanmayan (sticky) bir bildirimle kullanıcıya güven vermesi.
Şu ana kadar Expo Config Plugins kullanarak Native katmanda (Kotlin) bir Foreground Service yazdım. onTaskRemoved ve BOOT_COMPLETED gibi tetikleyicileri ekledim. Ancak gerçek cihaz testlerinde (özellikle Android 14 ve bazı OEM batarya katilleri olan Xiaomi/Samsung cihazlarda) şu iki sorunu aşamıyorum:
  1. Swipe-Away Sorunu: Uygulama "Son Uygulamalar" ekranından yukarı kaydırılarak kapatıldığında, Foreground Service bir süre sonra (bazen hemen, bazen 5 dk sonra) sistem tarafından öldürülüyor. START_STICKY dönmeme rağmen servis kendiliğinden tekrar ayağa kalkmıyor.
  2. Notification Persistence: Bildirim panelindeki bildirim bazen "kapatılabilir" hale geliyor veya servis ölünce kayboluyor. Kullanıcının bu bildirimi manuel olarak kaydırarak kapatmasını tamamen engellemek ve servisin yaşam döngüsüne %100 bağlamak istiyorum.
Neler Denedim?
  • PowerManager.isIgnoringBatteryOptimizations kontrolü ve izin yönlendirmesi.
  • NotificationCompat.Builder içinde setOngoing(true) ve setSticky(true) kullanımı.
  • Wakelock kullanarak işlemciyi uyanık tutmaya çalışmak.
Sorum şu: Android'in yeni kısıtlamalarında (Target SDK 34), bir sensör takip servisini "User-Stopped" durumunda bile native seviyede nasıl hayatta tutabilirim? Gözden kaçırdığım bir WorkManager stratejisi mi var yoksa Android artık buna hiçbir şekilde izin vermiyor mu?
Tecrübeli arkadaşların tavsiyelerine veya örnek bir repo/makale önerisine ihtiyacım var. Şimdiden teşekkürler!