Notificación de incendio cada 24 horas ya la hora exacta de 8 AM

Estoy usando AlarmManager() para AlarmManager() notificación y repetirla cada 24 horas.

Mi código está en onCreate() en Splash Actividad que se onCreate() primero cuando alguien abre App. El usuario puede instalar la aplicación en cualquier momento. Así que quiero que cuando el usuario instala la aplicación, comprueba la sincronización y luego dispara la notificación a las 8 de la mañana y lo repite diariamente. No quiero recibir notificaciones cuando alguien abra la aplicación.

Mi código es el siguiente:

 public class Splash extends Activity { final String WebsiteURL = "http://www.mytestbuddy.com"; String cookie; @SuppressLint("SimpleDateFormat") @Override protected void onCreate(Bundle showSplash) { // TODO Auto-generated method stub super.onCreate(showSplash); setContentView(R.layout.splash); getWindow().getDecorView().setBackgroundColor(Color.WHITE); Intent myIntent = new Intent(Splash.this, AlarmReceiver.class); final PendingIntent pendingIntent = PendingIntent.getBroadcast( Splash.this, 0, myIntent, 0); final AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); CookieSyncManager.createInstance(this); CookieManager cm = CookieManager.getInstance(); cm.setAcceptCookie(true); CookieSyncManager.getInstance().sync(); if (cm.getCookie("" + WebsiteURL + "") != null) { cookie = cm.getCookie("" + WebsiteURL + "").toString(); } else { cookie = null; } Thread timer = new Thread() { public void run() { try { sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } finally { if (cookie == null) { Intent openStartingPoint = new Intent( "com.MobileWeb.mytestbuddy.Login"); startActivity(openStartingPoint); } else if (cookie.contains("Premium")) { Calendar firingCal = Calendar.getInstance(); Calendar currentCal = Calendar.getInstance(); firingCal.set(Calendar.HOUR, 10); firingCal.set(Calendar.MINUTE, 30); firingCal.set(Calendar.SECOND, 0); long intendedTime = firingCal.getTimeInMillis(); long currentTime = currentCal.getTimeInMillis(); if (intendedTime >= currentTime) { alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent); } else { firingCal.add(Calendar.DAY_OF_MONTH, 1); intendedTime = firingCal.getTimeInMillis(); alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent); } Intent openStartingPoint = new Intent( "com.MobileWeb.mytestbuddy.PremiumMain"); startActivity(openStartingPoint); } else { Calendar firingCal = Calendar.getInstance(); Calendar currentCal = Calendar.getInstance(); firingCal.set(Calendar.HOUR, 10); firingCal.set(Calendar.MINUTE, 30); firingCal.set(Calendar.SECOND, 0); long intendedTime = firingCal.getTimeInMillis(); long currentTime = currentCal.getTimeInMillis(); if (intendedTime >= currentTime) { alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent); } else { firingCal.add(Calendar.DAY_OF_MONTH, 1); intendedTime = firingCal.getTimeInMillis(); alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent); } Intent openStartingPoint = new Intent( "com.MobileWeb.mytestbuddy.Main"); startActivity(openStartingPoint); } } } }; timer.start(); } 

}

Hacer lo que sugirió chintan. Para obtener una imagen clara, la exact solution podría parecer algo similar a la siguiente:

 Intent myIntent = new Intent(Splash.this, AlarmReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(Splash.this, 0, myIntent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Calendar firingCal= Calendar.getInstance(); Calendar currentCal = Calendar.getInstance(); firingCal.set(Calendar.HOUR, 8); // At the hour you wanna fire firingCal.set(Calendar.MINUTE, 0); // Particular minute firingCal.set(Calendar.SECOND, 0); // particular second long intendedTime = firingCal.getTimeInMillis(); long currentTime = currentCal.getTimeInMillis(); if(intendedTime >= currentTime){ // you can add buffer time too here to ignore some small differences in milliseconds // set from today alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent); } else{ // set from next day // you might consider using calendar.add() for adding one day to the current day firingCal.add(Calendar.DAY_OF_MONTH, 1); intendedTime = firingCal.getTimeInMillis(); alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, pendingIntent); } 

Aquí está el pseudocódigo:

Tienes que escribir este código dentro de tu Splash.java

Paso 1: Is_Alarm_Set(); [Boolean]

Paso 2: false [paso 3]

Paso 2: true [paso 8] (No es necesario configurarlo)

Paso 3: Get_Time() [Tiempo actual del usuario móvil]

Paso 4: Find_Time_Difference() [Esta función encontrará la diferencia entre la hora del móvil del usuario y su Hora de arreglo (8AM).]

Paso 5: Ahora configure su alarma según la diferencia horaria. [Es decir, la hora actual es 7 pm y la fecha es 1-junio y luego la alarma programada de 8 AM para el día siguiente.]

Paso 6: Establezca sus días de repetición setRepeating ()

Paso 7: Se disparará la alarma como por su tiempo fijo 8 AM.

Paso 8: Cambie su actividad.

Appu respuesta me ayudó mucho, pero si desea una versión fija de un poco más legible y en cortocircuito mira esto:

 PendingIntent pendingIntent = PendingIntent.getBroadcast(Splash.this, 0, myIntent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); Calendar firingCal= Calendar.getInstance(); Calendar currentCal = Calendar.getInstance(); firingCal.set(Calendar.HOUR_OF_DAY, 8); // At the hour you wanna fire firingCal.set(Calendar.MINUTE, 0); // Particular minute firingCal.set(Calendar.SECOND, 0); // particular second if(firingCal.compareTo(currentCal) < 0) { firingCal.add(Calendar.DAY_OF_MONTH, 1); } Long intendedTime = firingCal.getTimeInMillis(); alarmManager.setRepeating(AlarmManager.RTC, intendedTime , AlarmManager.INTERVAL_DAY, pendingIntent); 
 // Retrieve a PendingIntent that will perform a broadcast Intent alarmIntent = new Intent(HomeContactActivity.this, AlarmReceiver.class); pendingIntent = PendingIntent.getBroadcast( HomeContactActivity.this, 0, alarmIntent, 0); AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); // Set the alarm to start at 10:00 AM Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); calendar.set(Calendar.HOUR_OF_DAY, 10); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 86400000, // for repeating // in every 24 // hours pendingIntent); 
  • AlarmManager cuando se cierra la aplicación
  • ¿Qué sucede cuando inicio una alarma dos veces?
  • Cómo permitir que el teléfono funcione mientras usa la alarma RTC en Android
  • AlarmManager borrar todos los horarios en el apagado?
  • Aclaración del comportamiento de AlarmManager en Android
  • OnReceiver de BroadcastReceiver no llamado, AlarmManager
  • ¿Cuál es la definición de dormido para un dispositivo Android?
  • ¿Utilizar el Administrador de alarmas incluso si la aplicación está cerrada?
  • Compruebe el tiempo de PendingIntent existente en AlarmManager
  • ¿Cómo ejecutar una función de Android cada 15 minutos, y específicamente en la marca de 15 minutos todos los días?
  • SetRepeating () de AlarmManager se repite después de 1 minuto sin importar la hora (5 segundos en este caso, API 18+)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.