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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
#1

Уведомление по заданному времени - Android

18.11.2015, 02:14. Просмотров 1309. Ответов 39
Метки нет (Все метки)

Я начинающий программист-самоучка, поэтому прошу помощи. Не могу разобраться как сделать, чтоб выводилось уведомление в заданное время и дату. Например, поздравление с новым годом. Как выводить уведомления понял, а вот как установить его на определённую дату и время? Если можно пример.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
25.11.2015, 23:56  [ТС]     Уведомление по заданному времени #21
Можно это исправить?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
26.11.2015, 08:50     Уведомление по заданному времени #22
Какие "все notifications"?
Вижу только один nm.notify(1, notif);
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
26.11.2015, 17:49  [ТС]     Уведомление по заданному времени #23
Rube, ну у меня несколько их. И они выводятся все сразу, если id разный. Если одинаковый, то последнее выводится.
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
26.11.2015, 17:51     Уведомление по заданному времени #24
Цитата Сообщение от naven Посмотреть сообщение
если id notifications разный, то после перезагрузки устройства все notifications выводятся. Можно это как то исправить?
Цитата Сообщение от naven Посмотреть сообщение
Если одинаковый, то последнее выводится
Вроде как в вопросе уже есть ответ.
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
26.11.2015, 17:56  [ТС]     Уведомление по заданному времени #25
Spelcrawler, просто надо чтоб id был разный.
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
26.11.2015, 17:58     Уведомление по заданному времени #26
naven, если ид разный - уведомления разные, а все разные уведомления будут показаны. Если ид одинаковый у нескольких уведомлений - они будут показаны все по очереди, но не будут создавать новое уведомление, а заменят собой старое. Тут только так и никак больше.
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
26.11.2015, 18:02  [ТС]     Уведомление по заданному времени #27
Spelcrawler, а можно как-то без аларм, чтоб избежать эту проблему?
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
26.11.2015, 18:04     Уведомление по заданному времени #28
naven, можно и без аларм, но проблему это не решит. Ид на аларм и ид на уведомление это разные вещи.
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
26.11.2015, 18:08  [ТС]     Уведомление по заданному времени #29
Spelcrawler, я знаю, что это разные вещи.
Spelcrawler
525 / 495 / 111
Регистрация: 12.03.2014
Сообщений: 1,647
Завершенные тесты: 1
26.11.2015, 18:11     Уведомление по заданному времени #30
naven, тогда не понимаю в чем проблема.
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
26.11.2015, 18:21  [ТС]     Уведомление по заданному времени #31
Spelcrawler, то есть нет вариантов сделать так чтоб уведомления после перезагрузки Не выводились? Последние уведомления.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
26.11.2015, 19:31     Уведомление по заданному времени #32
naven, может хватит ромашка играть? Код выложи сюда. Чего то намудрил в броадкасте видимо.
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
26.11.2015, 21:28  [ТС]     Уведомление по заданному времени #33
Rube,
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
    @Override
    public void onCreate() {
        super.onCreate();
        Intent myIntent = new Intent(this, Happi.class) ;
        PendingIntent pIntent1 = PendingIntent.getBroadcast(this, 0, myIntent, 0);
        AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.MONTH, Calendar.NOVEMBER);
        cal.set(Calendar.DAY_OF_MONTH, 19);
        cal.set(Calendar.HOUR_OF_DAY, 20);
        cal.set(Calendar.MINUTE, 15);
        cal.set(Calendar.SECOND, 0);
        alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pIntent1);
 
        Intent myIntent2 = new Intent(this, Newer.class) ;
        PendingIntent pIntent2 = PendingIntent.getBroadcast(this, 0, myIntent2, 0);
        AlarmManager alarm2 = (AlarmManager)getSystemService(ALARM_SERVICE);
        Calendar cal2 = Calendar.getInstance();
        cal2.set(Calendar.MONTH, Calendar.NOVEMBER);
        cal2.set(Calendar.DAY_OF_MONTH, 19);
        cal2.set(Calendar.HOUR_OF_DAY, 20);
        cal2.set(Calendar.MINUTE, 16);
        cal2.set(Calendar.SECOND, 0);
        alarm2.set(AlarmManager.RTC_WAKEUP, cal2.getTimeInMillis(), pIntent2);
 
     }
 
 
    public IBinder onBind(Intent arg0) {
        return null;
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Happi extends BroadcastReceiver {
    NotificationManager nm;
 
    @Override
    public void onReceive(Context context, Intent intent) {
        String string1 = context.getResources().getString(R.string.an);
        String string2 = context.getResources().getString(R.string.prd);
        nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notif = new Notification(R.mipmap.ic_launcher, string1,
                System.currentTimeMillis());
 
        Intent intent1 = new Intent(context, MainActivity.class);
        intent1.putExtra(MainActivity.FILE_NAME, "somefile");
        PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent1, 0);
 
        notif.setLatestEventInfo(context, string2, string1, pIntent);
 
        notif.flags |= Notification.FLAG_AUTO_CANCEL;
        notif.defaults = Notification.DEFAULT_ALL;
        nm.notify(1, notif);
 
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Newer extends BroadcastReceiver {
    NotificationManager nm;
 
    @Override
    public void onReceive(Context context, Intent intent) {
        String string1 = context.getResources().getString(R.string.kr);
        String string2 = context.getResources().getString(R.string.prd);
        nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notif = new Notification(R.mipmap.ic_launcher, string1,
                System.currentTimeMillis());
 
        Intent intent1 = new Intent(context, MainActivity.class);
        intent1.putExtra(MainActivity.FILE_NAME, "somefile");
        PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent1, 0);
 
        notif.setLatestEventInfo(context, string2, string1, pIntent);
 
        notif.flags |= Notification.FLAG_AUTO_CANCEL;
        notif.defaults = Notification.DEFAULT_ALL;
        nm.notify(2, notif);
 
    }
}
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.11.2015, 08:12     Уведомление по заданному времени #34
Ну дык при загрузке устройства BroadcastReceiver запускает метод onReceive, а nm.notify запускает уведомление.
1. Используйте один BroadcastReceiver, зачем 2?
2. Запускайте в нем AlarmManager, а не Notification.
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
27.11.2015, 14:07  [ТС]     Уведомление по заданному времени #35
Rube, при загрузке устройства у меня запускается MyService это первый код, а второй и третий это само уведомление.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.11.2015, 14:30     Уведомление по заданному времени #36
naven, ну значит совершенно неправильный алгоритм. Составьте блок схему, это очень помогает.
Цитата Сообщение от naven Посмотреть сообщение
а второй и третий это само уведомление
а второй и третий это запуск при включении устройства.
Найдите уже туториал по AlarmManager и BroadcastReceiver, их пруд пруди в инете.
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
27.11.2015, 14:36  [ТС]     Уведомление по заданному времени #37
Rube, ну BroadcastReceiver запускает сервис, а в сервисе уже AlarmManager. Аларм по расписанию запускает класс с уведомление. Что не так то?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.11.2015, 18:12     Уведомление по заданному времени #38
Ткните меня в то место где BroadcastReceiver запускает сервис.
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
27.11.2015, 18:14  [ТС]     Уведомление по заданному времени #39
Rube, ну это на словах, я это в коде выше не написал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2015, 23:39     Уведомление по заданному времени
Еще ссылки по теме:

Уведомление пользователя при выходе из приложения Android
Android Оповещение по заданному времени и дате
Уведомление клиентов Android
Постоянное уведомление на шторке Android
Отправляем уведомление с подтверждением да или нет Android

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

Или воспользуйтесь поиском по форуму:
naven
1 / 1 / 0
Регистрация: 18.11.2015
Сообщений: 73
23.12.2015, 23:39  [ТС]     Уведомление по заданному времени #40
Почему ничего не срабатывает?
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
public class MyService extends Service {
    NotificationManager nm;
 
    public IBinder onBind(Intent intent) {
        return null;
    }
 
    void someTask() { }
 
    public int onStartCommand(Intent intent, int flags, int startId) {
        someTask();
        return super.onStartCommand(intent, flags, startId);
    }
 
    public void onDestroy() {
        super.onDestroy();
    }
 
    public void onCreate() {
        Calendar c = Calendar.getInstance();
        CharSequence date = c.get(Calendar.HOUR_OF_DAY) + "." + c.get(Calendar.MINUTE);
        if((date.equals("20.15")) || (date.equals("22.34")) || (date.equals("23.45"))) {
 
            CharSequence string1 = "Title";
            CharSequence string2 = "Text";
            nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            Notification notif = new Notification(R.mipmap.ic_launcher, string1,
                    System.currentTimeMillis());
 
            Intent intent1 = new Intent(this, MainActivity.class);
            PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent1, 0);
 
            notif.setLatestEventInfo(this, string2, string1, pIntent);
 
            notif.flags |= Notification.FLAG_AUTO_CANCEL;
            notif.defaults = Notification.DEFAULT_ALL;
            nm.notify(1, notif);
        }
    }
}
Yandex
Объявления
23.12.2015, 23:39     Уведомление по заданному времени
Ответ Создать тему
Опции темы

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