Android - как установить будильник на определенную дату - PullRequest
16 голосов
/ 15 января 2011

Я видел много уроков и пытался уже 2 часа, хотя что-то все еще не так. Я очень нервничаю сейчас :) Я хочу установить будильник, например. до 16:25 уйти, но ничего не происходит. У меня есть этот код:

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

Я также пробовал это:

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

Моя конечная цель - сделать это повторяющимся сигналом, например, он должен выходить каждый день в установленное время.

Обновление от 17.01.2011. До сих пор не работает. У меня есть этот код:

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

Я также пробовал это:

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

и это:

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

Ответы [ 4 ]

12 голосов
/ 09 марта 2012
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);


    }
}
11 голосов
/ 15 января 2011

Обычно вы не должны получать Calendar, как вы это делаете, для этого есть метод Calendar.getInstance():

Calendar cal = Calendar.getInstance();

Это дает вам календарь со всеми полями, установленными на текущую дату, а затем просто:

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);
6 голосов
/ 28 июня 2012

Следующий код отлично работает для тревоги.Дата и время, которые я упомянул здесь: 2012- 28 июня, 11:20:00.И самое главное, месяц указывается только от 0 t0 11.Значит июнь должен быть указан 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);
3 голосов
/ 15 января 2011

Вы не устанавливаете год в объекте Calendar.

Также обратите внимание, что new GregorianCalendar() уже устанавливает значение для текущей даты и времени.

...