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

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

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

Сообщение Mikhail_dev » 15 фев 2014, 11:32

Я пробовал, но т.к. это уведомления сервиса Foreground, то оно не удаляется.
У меня тоже Foreground, да + в отдельном процессе.
Последняя заморочка... При установке приложения (обновлении) сервис благополучно убивается и не восстанавливается. Есть какие то способы исправить такое поведение? А то после первого же обновления приложения, получается, сервис умирает.
О таких тонкостях к сожалению не подскажу.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

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

Сообщение altwin » 15 фев 2014, 11:49

sergpol писал(а):Последняя заморочка... При установке приложения (обновлении) сервис благополучно убивается и не восстанавливается. Есть какие то способы исправить такое поведение? А то после первого же обновления приложения, получается, сервис умирает.
Попробуйте создать BroadcastReceiver, который слушает интент: ACTION_PACKAGE_REPLACED
http://stackoverflow.com/a/10728732/2611075
Изображение

sergpol
Сообщения: 10
Зарегистрирован: 11 фев 2014, 08:50

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

Сообщение sergpol » 17 фев 2014, 09:43

altwin писал(а):Попробуйте создать BroadcastReceiver, который слушает интент: ACTION_PACKAGE_REPLACED
http://stackoverflow.com/a/10728732/2611075
Вот огромное спасибо, вот это помогло, все, вопрос закрыт, ОГРОМНЫЙ респект автору уроков!!!
Причем что интересно, по ссылке пишут что для API > 12 можно использовать ACTION_MY_PACKAGE_REPLACED, но у меня Android 4.2 в телефоне, и все прекрсно работает и с ACTION_PACKAGE_REPLACED (естественно надо проверять имя пакета).

AlexVinn
Сообщения: 81
Зарегистрирован: 04 апр 2014, 04:56

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

Сообщение AlexVinn » 03 май 2014, 14:56

Устанавливаю notif.number = 10 - иконку показывает, 10-ку не хочет. Что может быть не так ?
MyService.java
[syntax=java5]package com.example.p0991_servicenotification;

import java.util.concurrent.TimeUnit;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class MyService extends Service {
NotificationManager nm;

@Override
public void onCreate() {
super.onCreate();
nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}

public int onStartCommand(Intent intent, int flags, int startId) {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
sendNotif();
return super.onStartCommand(intent, flags, startId);
}

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(MainActivity.FILE_NAME, "somefile");
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);

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

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

// отправляем
nm.notify(1, notif);
}

public IBinder onBind(Intent arg0) {
return null;
}
}
[/syntax]
Тут должна быть подпись.

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

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

Сообщение Mikhail_dev » 03 май 2014, 15:47

А с чего это вдруг он десятку должен показывать? =) 10 - это идентификатор уведомления. Допустим если вывести два уведомления, с 10 и 11 идентификатором, то будет показано их оба, а если вывести два уведомления под идентификатором 10, то будет показано только одно, самое последнее уведомление, оно затрет первое.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 20 июн 2014, 18:11

Добрый день!

Подскажите как можно создать иконку в статус баре так, чтобы она не убиралась, когда вызывают очистку уведомлений стандартным способом Андроид. Чтобы иконка в статус бале была всегда пока в моем приложении взведен будильник. Ну что то на вроде того как в проге Dr.Web, она себе постоянно висит в левом углу и висит. Или как это реализовано во многих будильниках.

У меня есть AlarmManager который постоянно крутится, пока его сам не выключишь. И хочется чтобы пока он работает об этом уведомлял иконкой в статус баре, опять же как в Dr.Web ну или других подобных.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 20 июн 2014, 18:34

и кстати опять же о Dr.Web ... у него есть интересная особенность, интересно как это может быть реализовано

если вытянуть статус бар, и кликнуть по иконке Dr.Web, то естественно попадаешь в это приложение, но попадаешь именно в ту активити на которой ты его оставил. Я специально проверял, заходил просто в Dr.Web по его иконке в приложениях, открывал его меню настроек и заходил в настройки, затем жал кнопку HOME. Вытягивал статус бар, и вызывал Dr.Web из статус бара, и он открывался именно на той активити настроек на которой я его оставил выйдя из него по кнопке HOME.

то есть получается что Intent в статус баре у Dr.Web не жестко привязан к какой-то определенной активности, а указывает на последнюю которая была активной

это может быть активность статистики или карантина и вообще любая активность которая была до нажатия кнопки HOME

как такое реализовывается?

в уроке Intent жестко привязан к активити которую открывает Intent intent = new Intent(this, MainActivity.class);

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

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

Сообщение Mikhail_dev » 20 июн 2014, 18:48

[syntax=java5]

private PendingIntent contentIntent;
...
public void notifyPermanentLocationRequest(Bundle extras) {
String message = c.getString(R.string.location_is_requesting_permanently);
iSettingsActivityIntent.putExtras(extras);
contentIntent = PendingIntent.getActivity(c, PERMANENT_REQUEST_LOCATION, iSettingsActivityIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.ic_launcher)
.setWhen(System.currentTimeMillis())
.setAutoCancel(false)
.setOngoing(true)
.setTicker(message)
.setContentTitle(res.getString(R.string.app_name))
.setContentText(message);
mNotificationManager.notify(PERMANENT_REQUEST_LOCATION, builder.build());
}
[/syntax]
Это как я реализую уведомления. За блокировку удаления уведомления в статус баре отвечают два параметра, это setAutoCancel и setOngoing. В моем примере уведомление НЕ удаляется со статус бара.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 20 июн 2014, 18:48

я могу предположить что это делается через getRunningTasks, там определяется текущая активность приложения которая находится на вершине стека и происходит переключение на нее с использованием флага FLAG_ACTIVITY_NEW_TASK

но может я ошибаюсь, пусть старшие товарищи меня поправят

просто может есть какой-нибудь способ попроще реализовать это?

это я пишу про Dr.Web
Последний раз редактировалось n0tb0dy 20 июн 2014, 19:01, всего редактировалось 2 раза.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 20 июн 2014, 18:56

Mikhail_dev писал(а): Это как я реализую уведомления. За блокировку удаления уведомления в статус баре отвечают два параметра, это setAutoCancel и setOngoing. В моем примере уведомление НЕ удаляется со статус бара.
спасибо! а что думаете по поводу Dr.Web и примера из урока?

по ходу у Dr.Web нет жесткой привязки к активити откываемой из статус бара

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 20 июн 2014, 20:16

пытаюсь реализовать получение имени класса из таска и запихнуть его в интент но чет ошибку выдает

myTask=task.topActivity.getClassName();
Intent notificationIntent = new Intent(context, Class.forName(myTask));

ругается на Class.forName

еклипс выдает ClassNotFountExeption

Анэрон
Сообщения: 3
Зарегистрирован: 25 июл 2014, 10:58

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

Сообщение Анэрон » 08 авг 2014, 15:33

Ребята кто работал с последними версиями эклипса. Недавно слетел эклип уже на этапе дизайна приложения скачал заново платформы. Теперь при создании активити он родителя не activity указывает а ActionBarActivity и сапорт android.support.v7.app.ActionBarActivity; импотует. Мож я не те библеотеки цепляю? Или наподобие этого что -то должно быть?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

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

Сообщение altwin » 08 авг 2014, 15:35

Анэрон писал(а):Ребята кто работал с последними версиями эклипса. Недавно слетел эклип уже на этапе дизайна приложения скачал заново платформы. Теперь при создании активити он родителя не activity указывает а ActionBarActivity и сапорт android.support.v7.app.ActionBarActivity; импотует. Мож я не те библеотеки цепляю? Или наподобие этого что -то должно быть?
я честно хотел с ним поработать... но с openJDK у меня он даже при вызове автокомплита падает и работать за ним просто не возможно...
Изображение

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

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

Сообщение klblk » 09 авг 2014, 05:56

Анэрон писал(а):Ребята кто работал с последними версиями эклипса. Недавно слетел эклип уже на этапе дизайна приложения скачал заново платформы. Теперь при создании активити он родителя не activity указывает а ActionBarActivity и сапорт android.support.v7.app.ActionBarActivity; импотует. Мож я не те библеотеки цепляю? Или наподобие этого что -то должно быть?
android.support.v7 - для совместимости с ранними версиями андроида. Если указать мин версию api 14+ при создании проекта, то appcompat не будет подключаться к проекту. Насколько я знаю дело не в eclipse, в AS такая же политика.

Гугл не рекомендует использовать OpenJDK.

niixon
Сообщения: 24
Зарегистрирован: 13 окт 2013, 10:11

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

Сообщение niixon » 29 сен 2014, 10:09

Подскажите. Стоит такая задача. Нужно создавать нотификации таким образом, чтобы время старта нотификации было с 12 утра до 22 00 вечера. И нужно обязательно учесть часовой пояс. Может быть есть какие-то готовые решения?
Моя нотификация создается за 7 дней до ее старта. Получается как отложенная нотификация. Существует шанс, что пользователь уедет из страны, например, и ему в 3 часа ночи запипикает мое приложение.

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

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

Сообщение lisensei » 27 окт 2014, 12:18

Здравствуйте. Всё работает, но когда выключается экран уведомления не приходят, если включить экран или например музыка играет (при выключенном экране) уведомления приходят. Подскажите пожалуйста в чём проблема?

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

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

Сообщение klblk » 27 окт 2014, 13:29

lisensei писал(а):Здравствуйте. Всё работает, но когда выключается экран уведомления не приходят, если включить экран или например музыка играет (при выключенном экране) уведомления приходят. Подскажите пожалуйста в чём проблема?
Предположу что экран не просто гаснет, а устройство уходит в спящий режим (при включенной музыке этого не происходит из-за блокировки). Хотя это просто предположение. Устройство за 5 секунд не должно засыпать по идеи, но вероятно это зависит от устройства.

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

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

Сообщение lisensei » 27 окт 2014, 20:07

klblk писал(а):
lisensei писал(а):Здравствуйте. Всё работает, но когда выключается экран уведомления не приходят, если включить экран или например музыка играет (при выключенном экране) уведомления приходят. Подскажите пожалуйста в чём проблема?
Предположу что экран не просто гаснет, а устройство уходит в спящий режим (при включенной музыке этого не происходит из-за блокировки). Хотя это просто предположение. Устройство за 5 секунд не должно засыпать по идеи, но вероятно это зависит от устройства.
Возможно, но как сделать чтоб сервис продолжал работать и после того как была нажата клавиша блокировки экрана? Ну то есть он работает, но если по истечению интервала не включить экран то уведомление не приходит, т.е. работа сервиса получается не стабильной. Получается пока я пользуюсь устройством мне приходят уведомления, потом я на час допустим убрал телефон - уведомления не приходят, снова начал пользоваться телефоном - уведомления снова приходят. Подскажите возможные решения или что-то что могло бы помочь, может в манифесте что-то добавить нужно?

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

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

Сообщение klblk » 28 окт 2014, 07:44

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

ivan160892
Сообщения: 3
Зарегистрирован: 26 май 2013, 13:58

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

Сообщение ivan160892 » 05 ноя 2014, 15:09

Здравствуйте, такая проблема.
Есть стартовое Activity и два других. В сервисе формируется Notification ссылающийся на один из двух Activity(не главных).При нажатие на уведомление открывается неглавное Activity.
При нажатие уведомление просто закрывается( флаг), но не открывается Activity.Если же я направлю уведомление на главное Activity, то оно запускается. Но мне нужно запустить неглавное.

Ответить