2013-05-21 3 views
1
Intent myIntent = new Intent(Alarm.this, Automaton.class); 
        myIntent.putExtra("methodName", "myMethod"); 
        myIntent.putExtra("hour", tp.getCurrentHour().toString()); 
        myIntent.putExtra("minute", tp.getCurrentMinute().toString()); 
        hour = tp.getCurrentHour(); 
        minute = tp.getCurrentMinute(); 
        PendingIntent pendingIntent = PendingIntent.getActivity(Alarm.this, 0, myIntent,PendingIntent.FLAG_UPDATE_CURRENT); 
        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
         Calendar calendar = Calendar.getInstance(); 
         calendar.set(calendar.HOUR_OF_DAY, hour); 
         calendar.set(calendar.MINUTE, minute); 
         calendar.set(calendar.SECOND, 0); 
         alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 86400000, pendingIntent); 

Выше мой код. Вот моя проблема; У меня есть метод в другой Activity, который я хочу запустить в указанное время. Если пользователь выбирает время, которое НЕ прошло еще в тот же день (скажем, вы устанавливаете будильник в 10 утра за 11 утра, он будет работать нормально). Однако, если вы установите будильник на 9 утра в 10 утра, он мгновенно запустит ожидающее намерение. Не знаю, где я ошибаюсь. Любая помощь будет оценена!Аварийная сигнализация AlarmManager мгновенно

ответ

2

Возможно, вам необходимо проверить, меньше ли set time, чем current time. Если установленное время меньше текущего времени, не устанавливайте для него сигнал тревоги. Потому что это бесполезно, даже если вы держите его, когда время уже прошло.

+0

спасибо за быстрый ответ Appu, позволяет сказать, что я хочу, чтобы установить будильник в настоящее время (11:45 PM) для запуска завтра в 5:30 утра. Технически 5:30 утра уже прошло, поэтому, если я пойду, чтобы установить его, он выстрелится мгновенно. Это то, чего я пытаюсь избежать – user2121927

+0

Нет, я могу сказать, как вы понимаете, что все неправильно. Поскольку сигналы тревоги должны быть установлены с помощью миллисекунд. Таким образом, 11.45PM теперь в миллисекундах составляет менее 5:30 утра (в миллисекундах) завтра технически :) – Kanth

2

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

0

К тому, что сказал @shreyas, вам нужно сделать чек самостоятельно, если вам нужно поднять день.

Пример .. Если они выбирают 5:00 PM (HOUR_OF_DAY = 17), сравните это с текущим временем. Если это время (17) меньше текущего времени, то добавьте день в свой экземпляр календаря.

int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); 
calendar.set(calendar.DAY_OF_WEEK, dayOfWeek + 1); 
Смежные вопросы