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.
- Comunicación de IntentService y AlarmManager
- Java.lang.SecurityException:! @Too muchas alarmas (500) registradas de pid 10790 uid 10206
- ¿Android AlarmManager controla los cambios de horario de verano?
- Cancelar un AlarmManager pendienteIntent en otro pendienteintent
- ¿Cuál es la mejor manera de crear un recordatorio de citas en Android?
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(); }
}
- ¿Qué sucede con AlarmManager no entregado al repetir alarmas cuando el teléfono se despierta?
- Administrador de alarmas de Android trabajando, pero con retraso
- ¿Cómo guardar la alarma programada después de que la aplicación fue asesinada por Android o asesino de tareas?
- Android: ¿Cómo comprobar el correo electrónico en un momento específico con AlarmManager?
- ¿Cómo configurar más de una alarma a la vez en android?
- Android AlarmManager setExact () no es exacta
- Alarma de Android se cancela después de cerrar la aplicación
- La alarma se borra al reiniciar en nadroid
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?