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.
- ¿Qué sucede con AlarmManager no entregado al repetir alarmas cuando el teléfono se despierta?
- Comunicación de IntentService y AlarmManager
- Android setRepeating () y setInexactRepeating () no se disparan
- Ejemplo del Administrador de alarmas
- Android AlarmManager no se dispara después de la actualización de Google Play
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(); }
}
- AlarmManager no funciona en varios dispositivos
- Administrador de alarmas activado inmediatamente
- android configurar múltiples alarmas simultaneosuly
- ¿Cómo configurar una alarma de repetición exacta en API 19 (kitkat)?
- Android: ¿Cómo comprobar el correo electrónico en un momento específico con AlarmManager?
- La alarma se borra al reiniciar en nadroid
- Cómo configurar la alarma en Android?
- ¿Hay alguna forma de comprobar si ya está configurada una alarma?
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);
- Actionbarsherlock + tabs + multi fragmentos?
- Almacenar datos estáticos en Android – recurso personalizado?