120 lines
5.3 KiB
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());
|
|
}
|
|
}
|
|
|
|
}
|
|
|