Serviços e Notificações em Android

Serviços de Primeiro Plano e Notificações

Muitos aplicativos exibem notificações na barra de status ao iniciar, permitindo que continuem executando serviços importantes, como aplicativos de música ou previsão do tempo. Esses são conhecidos como serviços de primeiro plano, que têm uma vantagem significativa: não são facimlente encerrados pelo sistema devido à sua prioridade elevada.

Para criar um serviço de primeiro plano, basta configurar uma notificação no método onCreate() e chamar o método startForeground(). Abaixo está um exemplo simplificado, com comentários explicativos:

@Override
public void onCreate() {
    super.onCreate();
    // Define um PendingIntent para redirecionar para a MainActivity ao clicar na notificação
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
    Notification.Builder builder = new Notification.Builder(this);
    // Obtém o NotificationManager para gerenciar as notificações
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    // Configura a notificação com ícone, título, texto e hora
    builder.setSmallIcon(R.mipmap.ic_launcher)
           .setWhen(System.currentTimeMillis())
           .setContentTitle("Título da Notificação")
           .setContentText("Texto da Notificação")
           .setTicker("Mensagem ao iniciar") // Pode não funcionar em versões Android 5.0+
           .setContentIntent(pendingIntent);
    // Cria a notificação
    Notification notification = builder.build();
    // Exibe a notificação usando o ID 1
    notificationManager.notify(1, notification);
    // Inicia o serviço como serviço de primeiro plano usando o mesmo ID
    startForeground(1, notification);
}

Seerviços de Fundo com Agendamento

Serviços de fundo são utilizados para realizar tarefas periódicas, como atualizações ou verificações em segundo plano. Para implementar isso, combinamos AlarmManager com um mecanismo de broadcast simples.

Passo 1: Obtenha o AlarmManager

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

Passo 2: Configure uma tarefa agendada

int intervalo = 1000; // Intervalo de 1 segundo
long tempoAgendado = SystemClock.elapsedRealtime() + intervalo;
Intent intent = new Intent(this, ReceiverAgendado.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, tempoAgendado, pendingIntent);

Passo 3: Defina um Serviço para processar lógica periódica

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    new Thread(() -> {
        // Insira aqui a lógica desejada, como registro de logs ou atualização de dados
    }).start();
    return START_STICKY;
}

Passo 4: Crie um BroadcastReceiver para iniciar o Serviço

public class ReceiverAgendado extends BroadcastReceiver {
    @Override
    public void onReceive(Context contexto, Intent intent) {
        Intent novoIntent = new Intent(contexto, ServicoPeriodico.class);
        contexto.startService(novoIntent);
    }
}

Tags: android Service notificacao alarmmanager BroadcastReceiver

Publicado em 9-18 12:42