Veo la siguiente advertencia en PlayStore:
Your use of exact alarms is causing your app to crash for some Android users
Your app schedules exact alarms without checking whether the SCHEDULE_EXACT_ALARM permission has been granted. This is causing your app to crash for users on Android 14 because the permission is no longer granted by default.
In most cases, alternative methods of scheduling work or inexact alarms are more appropriate. If your use of exact alarms is justified, update your app so that it checks this permission is granted before scheduling.
Aunque, muy específicamente solo activo una alarma INEXACTA de la siguiente manera:
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val alarmIntent =
Intent(context, MediaDownloadAlarmReceiver::class.java).let { intent ->
PendingIntent.getBroadcast(
context,
0,
intent,
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)
}
val calendar =
Calendar.getInstance().apply {
timeInMillis = System.currentTimeMillis()
set(Calendar.HOUR_OF_DAY, 5)
set(Calendar.MINUTE, 0)
}
// Set the alarm to start at approximately 5:00 a.m.
alarmManager.setInexactRepeating(
AlarmManager.RTC_WAKEUP,
calendar.timeInMillis,
AlarmManager.INTERVAL_DAY,
alarmIntent)
Una vez que se activa la alarma, programo una solicitud única de trabajador:
override fun onReceive(context: Context?, intent: Intent?) {
if (context != null) {
MediaDownloadWorker.scheduleOneTimeRequest(
context = context,
source = "background_process")
}
}
¿Alguna idea de lo que me estoy perdiendo?
A primera vista, setInexactRepeating() no debería requerir el permiso SCHEDULE_EXACT_ALARM. Si Play Console está mostrando esa advertencia, es posible que alguna dependencia, librería de terceros o incluso una versión anterior de tu aplicación esté utilizando internamente métodos como setExact(), setExactAndAllowWhileIdle() o setAlarmClock().
También vale la pena revisar si WorkManager, Firebase u otra biblioteca relacionada con tareas en segundo plano está programando alarmas exactas en ciertos dispositivos o versiones de Android. Te recomendaría buscar en todo el proyecto referencias a esos métodos y revisar el informe de fallos en Android Vitals para identificar la traza exacta donde ocurre la excepción. Sin esa traza, es difícil asegurar que el código mostrado sea el origen de la advertencia.