Como criar AlarmManager no Android
Neste post veja como criar um AlarmManager no Android usando Kotlin
Última atualização em: | 11785 Visualizações
O que é AlarmManager?
A melhor definição e que descreve corretamente sua função é a seguinte:
AlarmManager
é uma classe que permite registar umIntent
para lançar a sua aplicação, serviço ouBroadcastReceiver
, a determinado dia e hora.
Podemos entender isso como um agendamento de uma tarefa. Qual tarefa? Isso é a sua intenção que ira definir o que deseja fazer naquele momento.
Para entender melhor vamos a um exemplo pratico de um AlarmManager
que executa uma simples chamada a um BroadcastReceiver
.
Chamando um BroadcastReceiver
Este exemplo apenas chama um BroadcastReceiver
para executar o método de recebimento da ação onReceive
.
Para isso primeiro precisamos criar uma intenção e agendar no AlarmManager
, podemos fazer isso usando o seguinte código de dentro de qualquer Activity
de sua aplicação:
val intent = Intent("EXECUTAR_ALARME")
val pIntent = PendingIntent.getBroadcast(this, 0, intent, 0)
val alarme = getSystemService(ALARM_SERVICE) as AlarmManager
alarme.setRepeating(AlarmManager.RTC_WAKEUP, 1, 60, pIntent)
O próximo passo é criar a classe que implemente a interface BroadcastReceiver
, que por sua vez nos obriga a implementar o método onReceive
que será executado a cada chamada.
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
class SampleAlarmReceiver : BroadcastReceiver() {
override fun onReceive(c: Context, i: Intent) {
}
}
Por fim, você precisa adicionar ao arquivo AndroidManifest.xml
entre as tags application
o seguinte xml:
<receiver android:name=".SampleAlarmReceiver">
<intent-filter>
<action android:name="EXECUTAR_ALARME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
Note que no
action
presente noreceiver
passamos o texto EXECUTAR_ALARME que foi informado na intenção que será executada quando oAlarmManager
disparar a ação.
Pronto, a cada minuto será executado o método onReceiver
a sua classe SampleAlarmReceiver
, sendo possível executar qualquer ação.
Mostrando uma notificação no Android
Caso queira mostrar uma notificação no Android, adicione o seguinte código dentro do método onReceive
:
val mBuilder = NotificationCompat.Builder(c, "123")
.setSmallIcon(R.drawable.launcher_icon)
.setContentTitle("Title")
.setContentText("Executando um AlarmManager")
.setAutoCancel(true)
val mNotificationManager = c.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
mNotificationManager.notify(100, mBuilder.build())
A classe completa fica assim:
import android.app.NotificationManager
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.support.v4.app.NotificationCompat
class SampleAlarmReceiver : BroadcastReceiver() {
override fun onReceive(c: Context, i: Intent) {
val mBuilder = NotificationCompat.Builder(c, "123")
.setSmallIcon(R.drawable.launcher_icon)
.setContentTitle("Title")
.setContentText("Executando um AlarmManager")
.setAutoCancel(true)
val mNotificationManager = c.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
mNotificationManager.notify(100, mBuilder.build())
}
}
Lembrando que neste post todo o código foi escrito utilizando Kotlin, mas você pode utilizar java sem problema algum, o resultado será o mesmo.
Qualquer dúvida deixe nos comentários.
Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.