Урок 99. Service. Уведомления - notifications

Обсуждение уроков
Аватара пользователя
lisensei
Сообщения: 5
Зарегистрирован: 27 окт 2014, 12:15

Re: Урок 99. Service. Уведомления - notifications

Сообщение lisensei » 14 ноя 2014, 18:27

klblk писал(а): Зависит от того какую задачу решает сервис:
1) Если задача продолжительная (проигрывание музыки, загрузка файлов, сложные вычисления), то нужно запускать сервис в режиме Foreground (есть урок) и использовать WakeLock (с ним нужно быть осторожным)
2) Если нужно в определенное время просто отправить уведомление, то вероятнее правильнее использовать AlarmManager (есть урок)
Здравствуйте ещё раз ) Использовал AlarmManager и всё вроде хорошо, но недавно обнаружил что на 4 андроиде уведомления вообще не приходят, хотя на 2.3.3 приходят стабильно. В чём может быть проблема?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 99. Service. Уведомления - notifications

Сообщение doter.ua » 15 ноя 2014, 02:37

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
alarmManager.setExact( бла бла );
} else {
alarmManager.set( бла бла );
}
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

finberg
Сообщения: 51
Зарегистрирован: 11 мар 2013, 14:20

Re: Урок 99. Service. Уведомления - notifications

Сообщение finberg » 09 дек 2014, 09:39

Добрый день!

Правильно ли я понимаю, что раз сервис запущен в отдельном процессе, то:
1. TimeUnit.SECONDS.sleep() не будет тормозить основной поток.
2. Если выйти и закрыть приложение, сеовис останется работать.

bydirect
Сообщения: 70
Зарегистрирован: 11 июн 2014, 10:36

Re: Урок 99. Service. Уведомления - notifications

Сообщение bydirect » 16 дек 2014, 14:07

Здравствуйте. Подскажите как подгрузить картинку в notification из интернета?

iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

Re: Урок 99. Service. Уведомления - notifications

Сообщение iandryxa » 04 янв 2015, 01:59

Всем привет!
Такой вопрос как передать данные Service из активности, то есть у меня есть активность, получает данные от сервера(строки), так вот нужно передать их сервису и вывести в уведомление.
Пробовал через интент:

Код: Выделить всё

Intent i = new Intent(MainActivity.this, MyService.class);
                        i.putExtra("title",  messages.get(0));
                        i.putExtra("content", contents.get(0));
                        startService(i);
Но в самом сервисе при вызове метода getIntent eclipse ругается что - The method getIntent() is undefined for the type MyService

Код: Выделить всё

Intent i = getIntent();


Как быть?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 99. Service. Уведомления - notifications

Сообщение doter.ua » 04 янв 2015, 14:09

онстарт команд срабатывает при запуске сервиса и каждый раз ,когда приходит интент. onStartCommand(Intent, int, int)
В аргументах приходит интент, проверяешь его на null и потом уже работаешь по задумке.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Аватара пользователя
gurjubat
Сообщения: 4
Зарегистрирован: 06 ноя 2013, 20:17
Откуда: Башкортостан

Re: Урок 99. Service. Уведомления - notifications

Сообщение gurjubat » 28 янв 2015, 22:43

кто подскажет,как можно реализовать закрытие приложение(убить полностью)при удаление уведомление?

Аватара пользователя
mitra
Сообщения: 10
Зарегистрирован: 18 ноя 2014, 11:22

Re: Урок 99. Service. Уведомления - notifications

Сообщение mitra » 29 янв 2015, 20:42

Всем привет! :)
A.N.R.I писал(а):Кстати, обратите внимание, что конструктор Notification (int icon, CharSequence tickerText, long when) обьявлен как deprecated, взамен предлагают Notification.Builder (для API 11 и выше)
Да, вот такой код не работает

Код: Выделить всё

void sendNotif() {
        // 1-я часть
        Notification notif = new Notification(R.drawable.ic_launcher, "Text in status bar",
                System.currentTimeMillis());

        // 3-я часть
        Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("param_name", 3);
        PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        // 2-я часть
        notif.setLatestEventInfo(this, "Notification's title", "Notification's text", pIntent);

        // ставим флаг, чтобы уведомление пропало после нажатия
        notif.flags |= Notification.FLAG_AUTO_CANCEL;

        // отправляем
        nm.notify(1, notif);
    }
Почитал об Notification.Builder и взял пример кода:

Код: Выделить всё

Notification notif = new Notification.Builder(this)
                .setContentTitle("ContentTitle")
                .setContentText("ContentText")
                .setSmallIcon(R.drawable.ic_launcher)
                .build();
Ругается на метод build, пишет, что необходим API level 16 (Added in API level 11 !?), а у меня минимальная версия 15. Что не так у меня? Подскажите.
Каждая незаконченная задача - это минус. Но каждый зачеркнутый минус - это плюс.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 99. Service. Уведомления - notifications

Сообщение klblk » 30 янв 2015, 07:17

mitra писал(а):Ругается на метод build, пишет, что необходим API level 16 (Added in API level 11 !?), а у меня минимальная версия 15. Что не так у меня? Подскажите.
Используйте метод getNotification() вместо build(). По сути гугл просто переименовал названия метода в 16+.
Ну а если deprecated смущает, то делайте проверку версии Android и в зависимости от версии используйте метод build() или getNotification().

Аватара пользователя
mitra
Сообщения: 10
Зарегистрирован: 18 ноя 2014, 11:22

Re: Урок 99. Service. Уведомления - notifications

Сообщение mitra » 30 янв 2015, 11:33

klblk писал(а): Используйте метод getNotification() вместо build(). По сути гугл просто переименовал названия метода в 16+.
Ну а если deprecated смущает, то делайте проверку версии Android и в зависимости от версии используйте метод build() или getNotification().
getNotification() is deprecated
В манифесте у меня так:

Код: Выделить всё

<uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="19" />
То есть получается, что ни new Notification не подходит, ни метод build() ни getNotification().
Непонятная ситуация. Кто может подсказать, где искать выход?
Каждая незаконченная задача - это минус. Но каждый зачеркнутый минус - это плюс.

Аватара пользователя
mitra
Сообщения: 10
Зарегистрирован: 18 ноя 2014, 11:22

Re: Урок 99. Service. Уведомления - notifications

Сообщение mitra » 03 фев 2015, 10:34

klblk писал(а):... Ну а если deprecated смущает, то делайте проверку версии Android и в зависимости от версии используйте метод build() или getNotification().
Сделал так, заработало :)

Код: Выделить всё

        if(Build.VERSION.SDK_INT == 15) {
            notif = builder.getNotification();
            // ставим флаг, чтобы уведомление пропало после нажатия
            notif.flags |= Notification.FLAG_AUTO_CANCEL;
            // отправляем
            nm.notify(1, notif);
        }
        if(Build.VERSION.SDK_INT > 15) {
            notif = builder.build();
            // ставим флаг, чтобы уведомление пропало после нажатия
            notif.flags |= Notification.FLAG_AUTO_CANCEL;
            // отправляем
            nm.notify(1, notif);
        }
Каждая незаконченная задача - это минус. Но каждый зачеркнутый минус - это плюс.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 99. Service. Уведомления - notifications

Сообщение klblk » 04 фев 2015, 06:58

mitra писал(а):Сделал так, заработало :)

Код: Выделить всё

        if(Build.VERSION.SDK_INT == 15) {
            notif = builder.getNotification();
            // ставим флаг, чтобы уведомление пропало после нажатия
            notif.flags |= Notification.FLAG_AUTO_CANCEL;
            // отправляем
            nm.notify(1, notif);
        }
        if(Build.VERSION.SDK_INT > 15) {
            notif = builder.build();
            // ставим флаг, чтобы уведомление пропало после нажатия
            notif.flags |= Notification.FLAG_AUTO_CANCEL;
            // отправляем
            nm.notify(1, notif);
        }
Корректнее было бы так:
[syntax=java] if(Build.VERSION.SDK_INT > 15) {
...
} else {
...
}[/syntax]
Даже если вы не поддерживаете версии <15 (сегодня не поддерживаете, а завтра передумаете=)

nikomp
Сообщения: 68
Зарегистрирован: 08 дек 2014, 17:03

Re: Урок 99. Service. Уведомления - notifications

Сообщение nikomp » 24 фев 2015, 14:35

у меня не получилось создать уведомление со звуком. Вообще на эмуляторе будет слышен звук?

leon_nash
Сообщения: 1
Зарегистрирован: 12 май 2015, 22:21

Re: Урок 99. Service. Уведомления - notifications

Сообщение leon_nash » 12 май 2015, 22:26

Очень интересный урок, большое спасибо.
BUT HELP
Всё работает прекрасно. Notification появляется через указанное время с указанным текстом. При нажатии открывается активити, но данные из intent пустые. Всё сделал как в уроке. Не могу понять, в чём проблема.
И вопрос. Можно ли из уведомления вызвать/передать данные обратно в сервис?

Андрей Валентинович
Сообщения: 13
Зарегистрирован: 24 янв 2014, 02:45

Re: Урок 99. Service. Уведомления - notifications

Сообщение Андрей Валентинович » 01 авг 2015, 12:04

Подскажите как реализовать, чтоб уведомление всплывало в указанную дату и время? Например, 1 января в 00:00 всплывет "С Новым годом"

OrcSin
Сообщения: 8
Зарегистрирован: 18 дек 2014, 12:45

Re: Урок 99. Service. Уведомления - notifications

Сообщение OrcSin » 09 сен 2015, 00:02

Подскажите что ему не нравится?
У меня стоит минималка 16 API, эмулятор тоже 16. Пишу в Андроид студио.
Если добавляю в манифест строку

Код: Выделить всё

android:process="proc2"
что бы сервис работал в отдельном процессе и получаю ошибку
Installation failed with message INSTALL_PARSE_FAILED_MANIFEST_MALFORMED.
It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing.

WARNING: Uninstalling will remove the application data!

Do you want to uninstall the existing application?
А если пишу так(добавил точку перед словом):

Код: Выделить всё

android:process=".proc2"
то ошибка пропадает, но сервис не запускается отдельным процессом.
Что не так?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 99. Service. Уведомления - notifications

Сообщение Mikhail_dev » 09 сен 2015, 09:19

Вот как у нас. Фильтры вам наверное не нужны
[syntax=xml]
<service
android:name=".tracker.TrackerService"
android:process=":tracker">

<intent-filter>
...
</intent-filter>

</service>
[/syntax]

OrcSin
Сообщения: 8
Зарегистрирован: 18 дек 2014, 12:45

Re: Урок 99. Service. Уведомления - notifications

Сообщение OrcSin » 09 сен 2015, 20:47

Вот мой блок сервиса MyService, сделал аналогию вашему коду, не понимает он .proc2.MyService

Код: Выделить всё

<service
            android:name=".proc2.MyService"
            android:enabled="true"
            android:exported="true"
            android:process=":proc2">
        </service>
Что я не так понял?

OrcSin
Сообщения: 8
Зарегистрирован: 18 дек 2014, 12:45

Re: Урок 99. Service. Уведомления - notifications

Сообщение OrcSin » 09 сен 2015, 20:51

Заработало отдельным потоком в вот таком виде, только кнопка стоп сервис, почему то не срабатывает :(
<service
android:name="MyService"
android:enabled="true"
android:exported="true"
android:process=":proc2">
</service>

Андрей Валентинович
Сообщения: 13
Зарегистрирован: 24 янв 2014, 02:45

Re: Урок 99. Service. Уведомления - notifications

Сообщение Андрей Валентинович » 13 сен 2015, 17:30

Подскажите как реализовать, чтоб уведомление всплывало в указанную дату и время? Например, 1 января в 00:00 всплывет "С Новым годом"

Ответить