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

Я устанавливаю будильник в определенное время, но каждый раз, когда я открываю приложение, оно включается. Это код, который я использовал:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0010000,intent,0);

Calendar time = Calendar.getInstance();
time.set(Calendar.HOUR, 5);
time.set(Calendar.MINUTE, 59);
time.set(Calendar.SECOND, 0);

alarmManager.set(AlarmManager.RTC,time.getTimeInMillis(),pendingIntent);

Ответы [ 2 ]

21 голосов
/ 15 ноября 2011

Хорошо, вам нужно установить будильник на следующий раз, когда это будет 5:59:00.Вы можете получить текущее время, если оно было до 5:59:00, установить будильник, если после 5:59:00 добавить день и установить будильник.Сделайте это так:

import java.util.Calendar;
import java.util.Date;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(new Panel(this));

    Date dat  = new Date();//initializes to now
    Calendar cal_alarm = Calendar.getInstance();
    Calendar cal_now = Calendar.getInstance();
    cal_now.setTime(dat);
    cal_alarm.setTime(dat);
    cal_alarm.set(Calendar.HOUR_OF_DAY,5);//set the alarm time
    cal_alarm.set(Calendar.MINUTE, 59);
    cal_alarm.set(Calendar.SECOND,0);
    if(cal_alarm.before(cal_now)){//if its in the past increment
        cal_alarm.add(Calendar.DATE,1);
    }
    //SET YOUR AlarmManager here

}

Я хотел бы привести пример, который можно собрать, но я еще не до конца разбираюсь в Alarmmanager, так что это то, что у вас есть.Построен на затмении 3.5.2 с ADK 15

0 голосов
/ 15 ноября 2011

Вместо помещения этого кода в функцию onCreate, поместите его в любое событие кнопки или любое другое событие, которое будет вызываться только при взаимодействии с пользователем. Я думаю, это подойдет.

PendingIntent pendingIntent =  PendingIntent.getBroadcast(this,0010000,intent,0);
pendingIntent.cancel();

добавьте этот метод отмены в ваш код. это отменит предыдущий будильник перед установкой нового.

...