Cómo configurar AlarmManager recurrente para ejecutar código diariamente

Actualmente estoy tratando de escribir un administrador de alarmas que haga sonar una alarma a diario en un período de tiempo específico. Primero verifico si el usuario ha configurado una alarma para ese día:

      if ((User.getReminderTime(Home.this) > 0)
    && (dt.getDate() != today.getDate() || dt.getDay() != today
      .getDay())) {
   AppointmentManager.setFutureAppointmentCheck(this
     .getApplicationContext());
   User.setLongSetting(this, "futureappts", today.getTime());
  }

Luego voy y configuro la alarma para que suene entre las 12 y las 12:10 del día siguiente:

     public static void setFutureAppointmentCheck(Context con) {
  AlarmManager am = (AlarmManager) con
    .getSystemService(Context.ALARM_SERVICE);

  Date futureDate = new Date(new Date().getTime() + 86400000);
  Random generator = new Random();

  futureDate.setHours(0);
  futureDate.setMinutes(generator.nextInt(10));
  futureDate.setSeconds(0);

  Intent intent = new Intent(con, FutureAppointmentReciever.class);

  PendingIntent sender = PendingIntent.getBroadcast(con, 0, intent,
    PendingIntent.FLAG_ONE_SHOT);

  am.set(AlarmManager.RTC_WAKEUP, futureDate.getTime(), sender);

 }

Ahora configuro un entorno de prueba para que se active cada dos minutos y parece estar funcionando bien, sin embargo, cuando lo implemento en un dispositivo real, el receptor no parece estar recibiendo las alarmas. Pensé que podría ser un problema con el dispositivo dormido, así que agregué el administrador de energía. Pero todavía no funciona:

      PowerManager pm = (PowerManager) context
    .getSystemService(Context.POWER_SERVICE);
  PowerManager.WakeLock wl = pm.newWakeLock(
    PowerManager.PARTIAL_WAKE_LOCK, "keepAlive");
  wl.acquire();
  setFutureAppointments(context.getApplicationContext());
  AppointmentManager.setFutureAppointmentCheck(context
    .getApplicationContext());
  User.setLongSetting(context.getApplicationContext(), "futureappts",
    new Date().getTime());
  wl.release();

¿Alguien ve algo que estoy haciendo descaradamente mal o estoy haciendo esto incorrectamente? Gracias por cualquier y toda la ayuda.