Establecer la repetición de la alarma cada día a una hora específica En Android

Estoy usando el Administrador de alarmas para ejecutar la alarma en el momento específico cada día. A continuación se muestra el código

Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 00); calendar.set(Calendar.MINUTE, 00); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Intent intent = new Intent(this, OnAlarmReceive.class); PendingIntent pendingIntent =PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, pendingIntent); 

Estoy poniendo alarma a las 12 am todos los días. Y A continuación se muestra el código para BroadCastReciever

 @Override public void onReceive(Context context, Intent intent) { System.out.println("Time is 12 Am"); Toast.makeText(context, "Alarm Triggered", Toast.LENGTH_LONG).show(); } 

Problema en este código es la alarma se activa tan pronto como ejecute la aplicación independientemente del tiempo. Cualquier ayuda será apreciada. Gracias

Tuve el mismo problema que tú y yo no pudimos hacer funcionar. Además, todos los ejemplos que pude encontrar también fueron establecer una fecha específica, no sólo un momento. Esto debería funcionar para usted:

 Intent myIntent = new Intent(ThisActivity.this , NotifyService.class); AlarmManager alarmManager = (AlarmManager) Context.getSystemService(Context.ALARM_SERVICE); PendingIntent pendingIntent = PendingIntent.getService(ThisActivity.this, 0, myIntent, 0); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 12); calendar.set(Calendar.MINUTE, 00); calendar.set(Calendar.SECOND, 00); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24*60*60*1000, pendingIntent); //Repeat every 24 hours 

Espero que esto ayude a solucionar su problema!

Intente utilizar esto:

 alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY, AlarmManager.INTERVAL_DAY, intent); 

Usted podría utilizar algo como esto:

 Calendar cal = Calendar.getInstance(); if(cal.getTimeInMillis() < System.currentTimeMillis()) { cal.add(Calendar.DAY_OF_YEAR, 7); } 

La alarma sólo se disparará inmediatamente si ha configurado la alarma en el pasado. Por ejemplo, ahora es 10: 00h y desea establecer una alarma todos los días a las 09:00. Para evitar esto, tienes que mirar qué hora es ahora, y cambiar la alarma 1 día si ese es el caso … Esto le permite usar el método setRepeating (que es más preciso que setInexactRepeating )

Esto soluciona el problema:

 Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 00); calendar.set(Calendar.MINUTE, 00); if(Calendar.getInstance().after(calendar)){ // Move to tomorrow calendar.add(Calendar.DATE, 1); } //... continue like before by setting the alarm 
  • Android- Eliminar Calendarview de DatePickerDialogFragment
  • Inserción de elementos de calendario en Android ICS
  • Cómo iniciar la aplicación de calendario de Android con Intent (Froyo)
  • Intención que abre la actividad de "evento de calendario nuevo"
  • Calendario y PagerAdapter - Vistas ilimitadas
  • Vista del Calendario de Android para el selector de fechas
  • Android - Nuevo estilo de calendario DatePicker y TimePicker
  • Problema con Calendar.get (Calendar.HOUR)
  • Android - ¿Cómo se especifica una ubicación al llamar al calendario con una intención?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.