Usando Alarmmanager para iniciar un servicio a una hora específica

He buscado en muchos lugares, pero no pude encontrar una explicación secuencial limpia de cómo iniciar un servicio (o si eso no es posible, entonces una actividad) a una hora específica todos los días usando el AlarmManager.

Quiero registrar varias alarmas de este tipo y activarlas debería dar como resultado que se inicie un servicio. Tendré un pequeño código en el servicio que luego se puede ejecutar y puedo terminar el servicio para siempre ...

Calendar cal = Calendar.getInstance();
Calendar cur_cal = Calendar.getInstance();
cur_cal.setTimeInMillis(System.currentTimeMillis());
Date date = new Date(cur_cal.get(Calendar.YEAR), cur_cal.get(Calendar.MONTH), cur_cal.get(Calendar.DATE), 16, 45);
cal.setTime(date);
Intent intent = new Intent(ProfileList.this, ActivateOnTime.class);
intent.putExtra("profile_id", 2);
PendingIntent pintent = PendingIntent.getService(ProfileList.this, 0, intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent);
System.out.println("The alarm set!!");

probé este código para activar la alarma a las 4.45 ... pero no está activando el servicio ... ¿tengo que mantener el proceso en ejecución? ¿Estoy haciendo algo mal?

Una cosa más, mi servicio se ejecuta perfectamente en caso de que use el siguiente código:

long firstTime = SystemClock.elapsedRealtime();
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 30*1000,pintent);

Respuestas a la pregunta(6)

Su respuesta a la pregunta