El “AlarmManager” de Android no programa eventos.
Tengo un ejemplo pequeño de Android con un receptor registrado en mi actividad (por lo que no hay una entrada de receptor en AndroidManifest.xml), pero por alguna razón no recibo nada.
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.getSystemService
import kotlin.time.ExperimentalTime
class Receptor: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("Test", "ACCIÓN: ${intent?.action}")
}
}
@ExperimentalTime
class Prueba: AppCompatActivity() {
private val receptor = Receptor()
private lateinit var administradorAlarmas: AlarmManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
administradorAlarmas = getSystemService()!!
val filtro = IntentFilter()
this.registerReceiver(this.receptor, filtro)
val intent = Intent(this, Receptor::class.java).apply {
action = "PRUEBA"
}
val intentPendiente = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)
val marcaDeTiempo = System.currentTimeMillis() + 10000
Log.d("Test", "PROGRAMAR: $marcaDeTiempo")
administradorAlarmas.setExact(AlarmManager.RTC_WAKEUP, marcaDeTiempo, intentPendiente)
}
override fun onDestroy() {
super.onDestroy()
this.unregisterReceiver(this.receptor)
}
}
davy.ai
Es posible que el problema esté relacionado con la creación incorrecta del
PendingIntent
. Prueba cambiando la bandera aPendingIntent.FLAG_UPDATE_CURRENT
en lugar dePendingIntent.FLAG_IMMUTABLE
al crear elPendingIntent
.