Android - Como abrir un Acticity al ejecutarse una alarma

 
Vista:
Imágen de perfil de Roberto
Val: 43
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como abrir un Acticity al ejecutarse una alarma

Publicado por Roberto (16 intervenciones) el 16/04/2021 19:28:37
Hola a tod@s

Tengo una aplicación de reservas, y me gustaría, que al reservar, se programara una alarma en el sistema y al ejecutarse, se abriera una activity, donde ya tengo programada una melodía, un aviso de texto y un GIF animado que le dirá al usuario que le quedan 15 minutos para finalizar su reserva

Actualmente tengo el siguiente código, que me toma la hora de la reserva y programa la alarma, pero, sería posible que se abriera el activity del recordatorio ?


En el botón de crear la reserva:
1
2
3
4
5
6
7
8
9
metodoGrabarReserva();
String[] parametros = metodoObtenerParametrosAlarma();
    String hora = parametros[0];
    String minutos = parametros[1];
    String dia = parametros[2];
int horaN = Integer.parseInt(hora);
int minutosN = Integer.parseInt(minutos);
int diaN = Integer.parseInt(dia);
metodoEstablecerAlarma(horaN, minutosN, diaN);


Los métodos de obtener parámetros y generar alarma:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
private String[] metodoObtenerParametrosAlarma()
{
    String[] datosAlarma = new String[5];
    String horaH = "";
    if ((hora != null) && (hora2 != null) && (hora3 != null))
    {
        horaH = hora3;
    }
    else if ((hora3 == null) && (hora != null) && (hora2 != null))
        {
            horaH = hora2;
        }
        else if ((hora3 == null) && (hora2 == null) && (hora != null))
            {
                horaH = hora;
            }
    String fechaH = fecha;
 
    String time = horaH;
 
    String[] splitTime = time.split(":");
    String hora = splitTime[0];
    String minutos = splitTime[1];
 
    String date = fechaH;
    String[] splitDate = date.split("/");
    String dia = splitDate[0];
    String mes = splitDate[1];
    String año = splitDate[2];
 
    datosAlarma[0] = hora;
    datosAlarma[1] = minutos;
    datosAlarma[2] = dia;
    datosAlarma[3] = mes;
    datosAlarma[4] = año;
 
    return datosAlarma;
}
public void metodoEstablecerAlarma(int hora, int minutos, int dia)
{
    Intent alarma = new Intent(AlarmClock.ACTION_SET_ALARM)
            .putExtra(AlarmClock.EXTRA_DAYS, dia)
            .putExtra(AlarmClock.EXTRA_HOUR, hora)
            .putExtra(AlarmClock.EXTRA_MINUTES, minutos);
    startActivity(alarma);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Roberto
Val: 43
Ha mantenido su posición en Android (en relación al último mes)
Gráfica de Android

Como abrir un Acticity al ejecutarse una alarma

Publicado por Roberto (16 intervenciones) el 17/04/2021 22:41:18
Hola de nuevo

Encontré éste código que inicia una tare en segundo plano, que creo me serviría para abrir mi activity, pero no entiendo muy bien el código, y no sabría donde poner mi actividad para poder ejecutarla, alguien me ayuda ?

mi actividad se llama "PantallaAlarma".
Creo que en esta llamada a la clase "com.example.dummy.AlarmReceiver" es la desencadenante.
Pero no lobro entender del todo como se iniciaría mi actividad ?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void metodoCrearAlarmaLanzarActicity(int hora, int minutos, int dia)
{
    // Verificamos si la tarea ya ha sido programada. Si no, entonces crea la tarea en AlarmManager.
    boolean alarmUp = (PendingIntent.getBroadcast(this, 0,
            new Intent("com.example.dummy.AlarmReceiver"),
            PendingIntent.FLAG_NO_CREATE) != null);
 
    if (  !alarmUp) {
        Intent intent = new Intent("com.example.dummy.AlarmReceiver");
        intent.putExtra("activate", true);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
 
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, hora);
        calendar.set(Calendar.MINUTE, minutos);
        calendar.set(Calendar.SECOND, 0);
 
        AlarmManager alarmManager = (AlarmManager) this.getSystemService(this.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
    }
}

Usa la siguiente clase para las tareas en segundo plano, pero como podría iniciar mi actividad en lugar de los servicios ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class AlarmReceiver extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
 
        if (!intent.hasExtra("activate")) {
            new IndexerMasterViewsTask().execute();
    new IndexerWorkViewsTask().execute();
 
        }
 
        /// your processing code comes here
 
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar