BemPAP/app/src/main/java/com/example/bem/AlarmReceiver.java

120 lines
5.3 KiB
Java

package com.example.bem;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import androidx.core.app.NotificationCompat;
public class AlarmReceiver extends BroadcastReceiver {
private static final String CHANNEL_ID = "alarm_channel";
private static final int NOTIFICATION_ID = 1001;
@Override
public void onReceive(Context context, Intent intent) {
String title = intent.getStringExtra("alarm_title");
String message = intent.getStringExtra("alarm_message");
String ringtoneUriString = intent.getStringExtra("ringtone_uri");
int alarmId = intent.getIntExtra("alarm_id", -1);
if (title == null) {
title = "Alarme de Medicamento";
}
if (message == null) {
message = "Hora de tomar o seu medicamento!";
}
Intent activityIntent = new Intent(context, AlarmRingingActivity.class);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
activityIntent.putExtra("alarm_title", title);
activityIntent.putExtra("alarm_time", new java.text.SimpleDateFormat("HH:mm", java.util.Locale.getDefault()).format(new java.util.Date()));
activityIntent.putExtra("ringtone_uri", ringtoneUriString);
activityIntent.putExtra("alarm_id", alarmId);
context.startActivity(activityIntent);
Intent serviceIntent = new Intent(context, AlarmSoundService.class);
serviceIntent.putExtra("alarm_title", title);
serviceIntent.putExtra("ringtone_uri", ringtoneUriString);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
context.startForegroundService(serviceIntent);
} else {
context.startService(serviceIntent);
}
createNotificationChannel(context);
showNotification(context, title, message, ringtoneUriString, alarmId);
}
private void createNotificationChannel(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "Alarmes de Medicação";
String description = "Notificações para lembretes de medicamentos";
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
channel.enableVibration(true);
channel.enableLights(true);
NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
if (notificationManager != null) {
notificationManager.createNotificationChannel(channel);
}
}
}
private void showNotification(Context context, String title, String message, String ringtoneUriString, int alarmId) {
Intent activityIntent = new Intent(context, AlarmRingingActivity.class);
activityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
activityIntent.putExtra("alarm_title", title);
activityIntent.putExtra("alarm_time", new java.text.SimpleDateFormat("HH:mm", java.util.Locale.getDefault()).format(new java.util.Date()));
activityIntent.putExtra("ringtone_uri", ringtoneUriString);
activityIntent.putExtra("alarm_id", alarmId);
PendingIntent pendingIntent = PendingIntent.getActivity(
context,
alarmId >= 0 ? alarmId : 0,
activityIntent,
PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT
);
Intent stopIntent = new Intent(context, AlarmSoundService.class);
stopIntent.setAction("STOP_ALARM");
PendingIntent stopPendingIntent = PendingIntent.getService(
context,
alarmId >= 0 ? alarmId + 1000 : 1000,
stopIntent,
PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT
);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(android.R.drawable.ic_lock_idle_alarm)
.setContentTitle("⏰ " + title)
.setContentText(message)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setCategory(NotificationCompat.CATEGORY_ALARM)
.setFullScreenIntent(pendingIntent, true)
.setOngoing(true)
.setAutoCancel(false)
.setContentIntent(pendingIntent)
.addAction(android.R.drawable.ic_media_pause, "Parar", stopPendingIntent);
NotificationManager notificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager != null) {
notificationManager.notify(NOTIFICATION_ID, builder.build());
}
}
}