android - tecnica - Notificación de incendio cada 24 horas y en el momento exacto de 8 AM
sistemas de deteccion de incendios pdf (4)
Aquí está el pseudocódigo:
Tienes que escribir este código dentro de tu Splash.java
Paso 1: Is_Alarm_Set();
[Booleano]
Paso 2: false
[paso 3]
Paso 2: true
[paso 8] (No es necesario configurar)
Paso 3: Get_Time()
[Tiempo móvil actual del usuario]
Paso 4: Find_Time_Difference()
[Esta función buscará la diferencia entre el tiempo móvil del usuario y su Tiempo fijo (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, luego configure la alarma de 8 AM para el día siguiente].
Paso 6: establece tus días de repetición setRepeating()
Paso 7: Encenderá la alarma según su horario fijo de 8 AM.
Paso 8: Cambia tu actividad.
Estoy usando AlarmManager()
para disparar la notificación y repetirla cada 24 horas.
Mi código está en onCreate()
en Splash Activity, que se onCreate()
primero cuando alguien abre la aplicación. El usuario puede instalar la aplicación en cualquier momento. Así que quiero que cuando el Usuario instale la aplicación, compruebe la sincronización y luego active la Notificación a las 8 AM y la repita diariamente. No quiero notificación cuando alguien abre 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();
}
}
Haz lo que chintan sugirió. Para obtener una imagen clara, la exact solution
podría tener un aspecto similar al 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);
}
La respuesta de Appu me ayudó mucho, pero si quieres una versión fija de ella, un poco más legible y cortocircuitada 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);