Android: cómo configurar una alarma para una fecha específica
calendar (4)
El siguiente código funciona perfectamente para alarma. La fecha y hora que mencioné aquí son: 2012- junio- 28, 11:20:00 AM. Y lo más importante es que el mes se especifica a partir de 0 t0 11 solamente. Los medios de junio deben ser especificados por 5.
AlarmManager objAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Calendar objCalendar = Calendar.getInstance();
objCalendar.set(Calendar.YEAR, 2012);
//objCalendar.set(Calendar.YEAR, objCalendar.get(Calendar.YEAR));
objCalendar.set(Calendar.MONTH, 5);
objCalendar.set(Calendar.DAY_OF_MONTH, 28);
objCalendar.set(Calendar.HOUR_OF_DAY, 11);
objCalendar.set(Calendar.MINUTE, 20);
objCalendar.set(Calendar.SECOND, 0);
objCalendar.set(Calendar.MILLISECOND, 0);
objCalendar.set(Calendar.AM_PM, Calendar.AM);
Intent alamShowIntent = new Intent(this,AlarmActivity.class);
PendingIntent alarmPendingIntent = PendingIntent.getActivity(this, 0,alamShowIntent,0 );
objAlarmManager.set(AlarmManager.RTC_WAKEUP,objCalendar.getTimeInMillis(), alarmPendingIntent);
He visto muchos tutoriales y he intentado durante 2 horas, aunque algo sigue mal. Ahora estoy muy nervioso :) Quiero programar una alarma, por ejemplo, a las 16:25 para que se apague, pero no pasa nada. Tengo este codigo
Calendar cur_cal = new GregorianCalendar();
cur_cal.setTimeInMillis(System.currentTimeMillis());
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR));
cal.set(Calendar.HOUR_OF_DAY, 16);
cal.set(Calendar.MINUTE, 25);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
También he intentado esto:
cal.set(Calendar.AM_PM, cur_cal.get(Calendar.AM_PM));
cal.set(Calendar.HOUR, 4);
Mi objetivo final es hacer que se repita la alarma, por ejemplo, debería dispararse todos los días a la hora establecida.
Actualización 01.17.2011. Sigue sin funcionar. Tengo este codigo
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2011);
cal.set(Calendar.MONTH, Calendar.JANUARY);
cal.set(Calendar.DAY_OF_MONTH, 17);
cal.set(Calendar.HOUR_OF_DAY, 16);
cal.set(Calendar.MINUTE, 58);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
También he intentado esto:
cal.set(Calendar.HOUR, 4);
cal.set(Calendar.AM_PM, Calendar.PM);
y esto:
cal.set(Calendar.HOUR_OF_DAY, 4 );
cal.set(Calendar.AM_PM, Calendar.PM);
No está configurando el año en su objeto Calendar
.
Además, tenga en cuenta que el new GregorianCalendar()
ya establece el valor en la fecha y hora actuales.
Por lo general, no debe obtener el Calendar
como lo hace, hay un método Calendar.getInstance()
para eso:
Calendar cal = Calendar.getInstance();
Eso le da un calendario con todos los campos establecidos en la fecha actual, entonces solo:
cal.set(Calendar.HOUR_OF_DAY, 16);
cal.set(Calendar.MINUTE, 25);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
package your.pack.name;
import java.util.Calendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
public class AlarmActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.clear();
cal.set(2012,2,8,18,16);
AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
// cal.add(Calendar.SECOND, 5);
alarmMgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
}
}