Android AlarmManager запускается в неподходящее время - PullRequest
4 голосов
/ 10 декабря 2011

Я устанавливаю тревогу с помощью диспетчера тревог для работы в 18:00. Если уже 6 вечера, я хочу, чтобы он запустился на следующий день в 6 часов вечера.

AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

        Calendar calendar = Calendar.getInstance();

        if(calendar.get(Calendar.HOUR_OF_DAY) < 18) {
            calendar.set(Calendar.HOUR, 18);
            calendar.set(Calendar.MINUTE, 0);
        } else {
            // Set sync time
            calendar.add(Calendar.DATE, 1);
            calendar.set(Calendar.HOUR, 18);
            calendar.set(Calendar.MINUTE, 0);
        }       

        Intent alarmIntent = new Intent(context, AlarmReceiver.class);  
        alarmIntent.putExtra("syncmode", "upload");

        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        manager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

У меня 6 планшетов Android, на которых установлен один и тот же точный код, и некоторые просыпаются в правильное время, другие запускаются несколько часов спустя. Я проверил часовые пояса, и все совпадает. Документация для AlarmManager говорит, что для установки будильника используется время UTC, но на практике я использую местное время, а те, которые работают, работают в правильное время. Остальные стреляют за 4 часа до времени. Что я делаю не так?

Редактировать: я не могу ответить на свой вопрос, поэтому я установил Calendar.HOUR вместо HOUR_OF_DAY, из-за которого время было установлено неправильно.

1 Ответ

2 голосов
/ 10 декабря 2011

Точно так же это будет удалено из списка «Без ответа»:

Я устанавливал Calendar.HOUR вместо HOUR_OF_DAY, из-за которого время устанавливалось неправильно.

...