Como criar AlarmManager no Android

Neste post veja como criar um AlarmManager no Android usando Kotlin

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Android - TUTORIAL

Última atualização em: | 2822 Visualizações

O que é AlarmManager?

A melhor definição e que descreve corretamente sua função é a seguinte:

AlarmManager é uma classe que permite registar um Intent para lançar a sua aplicação, serviço ou BroadcastReceiver, 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 no receiver passamos o texto EXECUTAR_ALARME que foi informado na intenção que será executada quando o AlarmManager 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.



Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!