2011-01-15 13 views
13

He visto muchos tutoriales y he intentado durante 2 horas, aunque todavía hay algo mal. Ahora estoy muy nervioso :) Quiero configurar una alarma, p. a las 16:25 para estallar, pero no pasa nada. Tengo este código:Android: cómo configurar una alarma en una fecha específica

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 sea una alarma que se repite, por ejemplo, debería apagarse todos los días a la hora establecida.

Actualización 01.17.2011. Sigue sin funcionar. Tengo este código:

  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); 

Respuesta

8
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); 


    } 
} 
+1

chicos ... es el código perfecto para crear alaram ... –

+2

pruebo esto y recibí un error en esta línea: Intent intennt = new Intent (this, AlarmReceiver.class); Cual puede ser el problema ? – Gold

+0

@Gold Creó una clase java con el nombre AlarmReceiver, y está configurada para la devolución de llamada de las alarmas. Tienes que crear uno propio o crear otro y cambiar AlarmReceiver al nombre de tu actividad. – tfrascaroli

3

No está ajustando el año en su objeto Calendar.

Además, tenga en cuenta que new GregorianCalendar() ya establece el valor a la fecha y hora actuales.

10

Por lo general, usted no debe obtener Calendar como lo hace, no es Calendar.getInstance() método para que:

Calendar cal = Calendar.getInstance(); 

Eso le da un calendario con todos los campos establecidos hasta la fecha actual, entonces simplemente:

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); 
+2

Gracias, está trabajando ahora. Pero ¿por qué no funciona si configuro cal.set (Calendar.YEAR, 2011); \t cal.set (Calendar.MONTH, 1); \t cal.set (Calendar.DAY_OF_MONTH, 16); ? – erdomester

+0

@erdomester Use cal.set (Calendar.MONTH, Calendar.JANUARY) .. '1' indica para febrero, supongo. –

+0

Todavía no funciona. He actualizado la publicación principal. – erdomester

5

El siguiente código funciona perfectamente para la alarma. La fecha y hora que mencioné aquí es: 2012- de junio a 28, 11:20:00 a.m. Y lo más importante es que el mes se especifica solo de 0 a 11. Significa que June debe especificarse 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); 
+0

? Trataré de usar este. : D @Jomia – gumuruh

Cuestiones relacionadas