2015-04-14 3 views
0

Привет, я хочу отправлять данные на сервер каждые семь часов каждый день. Для этого я назвал эту функцию в своей деятельности.Запланировать задачу каждые 7 вечера

private void startTimer() { 
    Intent alarmIntent = new Intent(getApplicationContext(), LocTimer.class); 
    pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, 0); 

    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    int interval = 1000*60*60*24; 
    c = Calendar.getInstance(); 

    c.setTimeInMillis(System.currentTimeMillis()); 
    c.set(Calendar.HOUR_OF_DAY, 19); 
    c.set(Calendar.MINUTE, 00); 
    manager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), interval, pendingIntent); 

    } 

В способе приема класса LocTimer я отправляю данные на сервер. Но в первый раз, когда активность загружается, startTimer отправляет данные на сервер. После этого каждые 24 часа он записывает данные. Я пытаюсь прекратить отправку данных в первый раз, когда активность загружается и отправляется только на 7 вечера.

ответ

0

Вы можете установить время Alaram менеджер для вызова намерения только один раз вместо повторяющихся раз за счет изменения кода в вышеуказанном способе

Это:

manager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), interval, pendingIntent); 

В:

manager.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent); 
+1

Он ясно упомянул в сообщении, что он хочет каждый день планировать задание в 7 вечера, поэтому использование manager.setRepeating в этом случае является правильным. – TMS

+1

Да, вы правы, @TMS работает нормально, но всякий раз, когда я начинаю свою деятельность, он автоматически запускается и в то же время. И в 7 часов вечера он также запускается. –

+0

Благодарим вас за очистку @TMS. Если это так, тогда вы можете опубликовать код сокрытия для текущей деятельности? –

0

Я бы порекомендовал изменить подход.

Создайте foreground service, который инициируется в начале вышеуказанного действия, упомянутого в вашем вопросе (это необходимо сделать только один раз).

Эта служба переднего плана должна содержать alrammanager, который запускает ожидающее намерения и/или отправляет данные на сервер по расписанию (в 7 вечера).

Надеюсь, это поможет!

Смежные вопросы