Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
TheCollapse
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 47
Завершенные тесты: 1
#1

AlarmManager и Service or Receiver? - Программирование Android

11.12.2015, 21:56. Просмотров 276. Ответов 1

Целый день искал, но нифига не нашел( то что нашел помогло тоолько частично).
Суть вот в чем, у меня есть AlarmManeger как уже всем и так ясно, он работает прекрасно без преувеличения, реализован с помощю BroadcastReceiver. Вот собствено сам код:
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
51
52
53
54
55
56
57
58
59
60
61
public class AlarmManagerBroadcastReceiver extends BroadcastReceiver {
    public static String ONE_TIME = "onetime";
    public static final String NOTIFICATION_TITLE = "notification_title";
    public static final String NOTIFICATION_DETAILS = "notification_details";
    public static final String NOTIFICATION_REQUEST = "notification_request_code";
 
 
    @Override
  public void onReceive(Context context, Intent intent) {
            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "com.something.alarm");
            //Acquire the lock
            wl.acquire();
            //You can do the processing here update the widget/remote views.
            Bundle extras = intent.getExtras();
            StringBuilder msgStr = new StringBuilder();
            String title = extras.getString(NOTIFICATION_TITLE);
            String details = extras.getString(NOTIFICATION_DETAILS);
            int reqCode = extras.getInt(NOTIFICATION_REQUEST);
            msgStr.append("One time Timer : ");
            Utils.generateNotification(context, title, details, reqCode);
            Format formatter = new SimpleDateFormat("hh:mm:ss a");
            msgStr.append(formatter.format(new Date()));
 
            Toast.makeText(context, msgStr, Toast.LENGTH_LONG).show();
 
            //Release the lock
            wl.release();
    }
 
 
    public void CancelAlarm(Context context, int requestCode)
    {
        Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
        PendingIntent sender = PendingIntent.getBroadcast(context, requestCode, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(sender);
    }
    public void setOnetimeTimer(Context context, Calendar d, String title, String details, int requestCode){
        AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, AlarmManagerBroadcastReceiver.class);
        intent.putExtra(ONE_TIME, Boolean.TRUE);
        intent.putExtra(NOTIFICATION_TITLE, title);
        intent.putExtra(NOTIFICATION_DETAILS, details);
        intent.putExtra(NOTIFICATION_REQUEST, requestCode);
        Log.i("setOnetimeTimer",  "  "+requestCode);
 
        PendingIntent pi = PendingIntent.getBroadcast(context, requestCode, intent, 0);
 
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.YEAR, d.get(Calendar.YEAR));
        calendar.set(Calendar.MONTH, d.get(Calendar.MONTH));
        calendar.set(Calendar.DAY_OF_MONTH, d.get(Calendar.DAY_OF_MONTH));
        calendar.set(Calendar.HOUR_OF_DAY, d.get(Calendar.HOUR_OF_DAY));
        calendar.set(Calendar.MINUTE, d.get(Calendar.MINUTE));
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.AM_PM, d.get(Calendar.AM_PM));
        am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
    }
}
Как уже говорил все работает, так как надо, выводит сообщение в нужное время, то когда я завершают процесс через деспетчер задач то сообщения больше не показываются. Я отлично знаю, что это работает таким образом, как сделать так чтобы после закрытия он продолжал свою работу? Не лучше ли будет использовать Сервис с START_STICKY (хотя я пробовал и оно мне не работало )?
Я не хочу сделать вечную службу, только чтобы после закрытия все работало, поскольку большинство людей так закрывают свои программы (сейчас не об этом), чтобы возможность закрытия (точнее остановки) из "запущены службы" так и оставалась.
Подскажите пожалуйста буду очень благодарен. По возможности ссылки на решения это проблемы, если я плохо искал, или лучше на моем примере что поправить и т.д.
Благодарю за понимание!!!

Добавлено через 9 часов 49 минут
up?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2015, 21:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос AlarmManager и Service or Receiver? (Программирование Android):

Подружить receiver и service - Программирование Android
вообщем такая ситуация. У меня есть сервис который каждые 10 минут отправляет данные на сервер. Мне нужно сделать так чтоб этот сервис...

Таймер, AlarmManager и Service на Android - Программирование Android
Добрый вечер. Я уже создавал тем(ы) про таймер. И мне очень здорово помогли разобраться с Андроидом, особенно OlegJV, powowstal....

Alarmmanager +Service пропуск запусков - Программирование Android
Каждые 20 сек. запускается сервис с помощью AlarmManager . На одном смартфоне работает абсолютно идеально а на втором запусков servike...

Динамический Receiver в Service перестаёт принимать сообщения - Программирование Android
В классе, который наследуется от Service определен BroadcastReceiver. Когда ловим сообщение о изменении состояния подключения к сети, то...

Receiver - Программирование Android
Добрый день уважаемые форумчане! Помогите разобраться, на сколько я понял receiver нужен для прослушки широковещателных сообщений, т.е к...

AlarmManager - Программирование Android
Всем привет. Взял код AlarmManager отсюда. В свой проект добавил AlarmManagerBroadcastReceiver.java и код AlarmManagerActivity.java в свое...

1
TheCollapse
0 / 0 / 0
Регистрация: 08.10.2013
Сообщений: 47
Завершенные тесты: 1
12.12.2015, 23:04  [ТС] #2
up pls!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2015, 23:04
Привет! Вот еще темы с ответами:

AlarmManager - Программирование Android
Добрый вечер, как задать время вручную ? alarmManager.set(AlarmManager.RTC, System.currentTimeMillis(), pendingIntent);

Receiver не принимает сообщения - Программирование Android
Привет. Почему-то receiver не принимает системные броадкасты, можешь какая-то ошибка в моей писанине, а ее "замыленым" взглядом не вижу. ...

WhatsApp call receiver - Программирование Android
После появления звонков можно ли как определить начало и конец звонка как в gsm?

AlarmManager и TextView - Программирование Android
Здравствуйте. Задача такая: есть AlarmManager и TextView. Как заставить AlarmManager отсчитывать время, заданное пользователем, и...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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