Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
#1

AlarmReceiver - Программирование Android

19.01.2014, 09:29. Просмотров 1251. Ответов 3
Метки нет (Все метки)

C помощью него можно запустить периодические события.
А можно ли как создать события не по таймеру, а в определенное время на каждый день как будильник.
Например каждый день в 17.00.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2014, 09:29     AlarmReceiver
Посмотрите здесь:

Запускаем AlarmReceiver за 15 минут до старта - Программирование Android
Привет столкнулся с проблемой При выборе времени в time pickers срабатывает след pendingIntent =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
20.01.2014, 13:59     AlarmReceiver #2
Можно, вот пример.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package com.example.scheduleservice;
 
import org.joda.time.DateTime;
import org.joda.time.DateTimeFieldType;
import org.joda.time.Interval;
 
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 MainActivity extends Activity {
    // время когда должен срабатывать аларм
    public static final int HOUR = 14, MINUTE = 26, SECONDS = 0;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // юзаю библиотеку jodatime
        // текущее время
        DateTime start = new DateTime();
        // время до старта аларма
        DateTime end = new DateTime(
                start.get(DateTimeFieldType.year()), 
                start.get(DateTimeFieldType.monthOfYear()), 
                start.get(DateTimeFieldType.dayOfMonth()), 
                HOUR, MINUTE, SECONDS);
        // если время уже прошло, переходим на следующий день
        if(!end.isAfterNow()) {
            end = end.plusDays(1);
        }
        // вычисляем разницу времени
        Interval interval = new Interval(start, end);
        start = start.plus(interval.toDurationMillis());
        // аларм будет запускать сервис
        Intent intent = new Intent(this, LoadService.class);
        PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
        AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        
        // Schedule timer
        alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
                start.getMillis(), // сдвиг времени
                24 * 60 * 60 * 1000, // интрвал - сутки
                pendingIntent);
    }
    
}
Также, я добавил себе ресивер получения события RECEIVE_BOOT_COMPLETED, в котором я также вычисляю сдвиг времени и устанавливаю аларм для запуска сервиса.
xbarmaglot
3 / 3 / 0
Регистрация: 06.10.2012
Сообщений: 248
20.01.2014, 14:10  [ТС]     AlarmReceiver #3
Понятно. Спасибо.
А почему используется alarm.setInexactRepeating, а не alarm.setRepeating
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
20.01.2014, 14:32     AlarmReceiver #4
В документации все написано:
Schedule a repeating alarm that has inexact trigger time requirements; for example, an alarm that repeats every hour, but not necessarily at the top of every hour. These alarms are more power-efficient than the strict recurrences traditionally supplied by setRepeating(int, long, long, PendingIntent), since the system can adjust alarms' delivery times to cause them to fire simultaneously, avoiding waking the device from sleep more than necessary.
These alarms are more power-efficient
для меня это важнее.
Yandex
Объявления
20.01.2014, 14:32     AlarmReceiver
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru