2011-01-15 11 views
13

Widziałem wiele tutoriali i próbowałem przez 2 godziny, ale coś jest nadal nie tak. Jestem teraz bardzo zdenerwowany :) Chcę ustawić alarm, np. do 16:25, aby wyjść, ale nic się nie dzieje. Mam ten kod:Android - jak ustawić alarm na konkretną datę

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

Próbowałem też tak:

cal.set(Calendar.AM_PM, cur_cal.get(Calendar.AM_PM)); 
    cal.set(Calendar.HOUR, 4); 

Moim ostatecznym celem jest, aby to powtarzający się alarm, na przykład Powinien wychodzić codziennie o ustalonej godzinie.

Aktualizacja 01.17.2011. Wciąż nie działa. Mam ten kod:

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

Próbowałem też tak:

cal.set(Calendar.HOUR, 4); 
cal.set(Calendar.AM_PM, Calendar.PM); 

i tak:

cal.set(Calendar.HOUR_OF_DAY, 4); 
      cal.set(Calendar.AM_PM, Calendar.PM); 

Odpowiedz

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

faceci ... jego idealny kod do tworzenia alaram ... –

+2

próbuję tego i mam błąd na linia: Intencja intent = new Intent (this, AlarmReceiver.class); jaki może być problem? – Gold

+0

@Gold Stworzył java .class o nazwie AlarmReceiver, i jest ustawiony jako callback dla alarmów. Musisz albo utworzyć własną, albo stworzyć inną i zmienić AlarmReceiver na dowolną nazwę swojej działalności. – tfrascaroli

3

Nie jesteś Ustawianie roku w obiekcie Calendar.

Należy również pamiętać, że new GregorianCalendar() już ustawia wartość na bieżącą datę i godzinę.

10

Zazwyczaj nie powinien uzyskać Calendar jak ty, nie ma Calendar.getInstance() sposób, że:

Calendar cal = Calendar.getInstance(); 

To daje kalendarz ze wszystkimi polami ustawionymi na bieżącą datę, a potem po prostu:

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

Dziękuję, działa już teraz. Ale dlaczego to nie działa, jeśli ustawiam cal.set (Calendar.YEAR, 2011); \t cal.set (Calendar.MONTH, 1); \t cal.set (Kalendarz.DAY_OF_MONTH, 16); ? – erdomester

+0

@erdomester Użyj cal.set (Calendar.MONTH, Calendar.JANUARY) .. "1" mówi o lutym, jak sądzę. –

+0

Nadal nie działa. Zaktualizowałem główny post. – erdomester

5

Poniższy kod działa idealnie na alarm. Data i godzina, o których tu wspominam to: 2012- czerwiec-28, 11:20:00. Najważniejszą rzeczą jest to, że miesiąc jest podany tylko od 0 t0 11. Środki czerwca powinny być określone przez 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

spróbuję użyć tego. : D @Jomia – gumuruh

Powiązane problemy