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

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 25 июл 2012, 23:00

В этом уроке:
- шлем уведомление из сервиса


Click here to read this article!
Последний раз редактировалось damager82 21 дек 2017, 01:49, всего редактировалось 15 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Jane
Сообщения: 6
Зарегистрирован: 11 июл 2012, 12:30

Re: Урок 99. Service. Уведомления (Notifications)

Сообщение Jane » 26 июл 2012, 15:51

Добрый день!
Подскажите, пожалуйста, почему |= , а не просто =
в notif.flags |= Notification.FLAG_AUTO_CANCEL;

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 99. Service. Уведомления (Notifications)

Сообщение damager82 » 30 июл 2012, 09:53

Jane писал(а):Добрый день!
Подскажите, пожалуйста, почему |= , а не просто =
в notif.flags |= Notification.FLAG_AUTO_CANCEL;
Потому что мы флаг добавляем к флагам. Нужно сохранить уже установленные флаги.
Тут есть неплохой материал на эту тему: http://www.codeproject.com/Articles/137 ... Enum-Flags
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

or8it
Сообщения: 1
Зарегистрирован: 30 июл 2012, 16:31

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

Сообщение or8it » 30 июл 2012, 16:33

Подскажите пожалуйста, можно ли по клику на уведомлении вызвать любое другое активити. Если да, то как?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 30 июл 2012, 17:16

or8it писал(а):Подскажите пожалуйста, можно ли по клику на уведомлении вызвать любое другое активити. Если да, то как?
Когда создаете Intent (третья часть), указываете там данные для вызова нужного вам Activity. Оно в итоге и вызовется...
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Observer
Сообщения: 3
Зарегистрирован: 05 авг 2012, 13:41

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

Сообщение Observer » 05 авг 2012, 15:11

Прочитал все уроки по Сервисам. К сожалению, так и не нашел гибкого способа ДВУСТОРОННЕГО обмена данными с сервисом. Зачастую нужно общаться с сервисом именно в двух направлениях: чтобы и у Активити был "тунель" к сервису, и у сервиса был тунель к активити. При этом неплохо было бы иметь возможность передавать ЛЮБЫЕ объекты в обе стороны, не ограничиваясь всеми putExtra, которые можно положить в интент.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

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

Сообщение rezak90 » 05 авг 2012, 15:42

Observer писал(а):Прочитал все уроки по Сервисам. К сожалению, так и не нашел гибкого способа ДВУСТОРОННЕГО обмена данными с сервисом. Зачастую нужно общаться с сервисом именно в двух направлениях: чтобы и у Активити был "тунель" к сервису, и у сервиса был тунель к активити. При этом неплохо было бы иметь возможность передавать ЛЮБЫЕ объекты в обе стороны, не ограничиваясь всеми putExtra, которые можно положить в интент.
на счёт гибкой передачи данных, так это по любому должен быть некий двусторонний канал, без этого никуда. На счёт любых объектов, я не уверен но видел как сначала Bundle заполняется а потом передаётся в активити, при этом любые объекты, в общем если не срочно то завтра вспомню/пересмотрю примеры.
R.id.team
Политика на форуме запрещена

Observer
Сообщения: 3
Зарегистрирован: 05 авг 2012, 13:41

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

Сообщение Observer » 05 авг 2012, 16:03

rezak90 писал(а):на счёт гибкой передачи данных, так это по любому должен быть некий двусторонний канал, без этого никуда. На счёт любых объектов, я не уверен но видел как сначала Bundle заполняется а потом передаётся в активити, при этом любые объекты, в общем если не срочно то завтра вспомню/пересмотрю примеры.
Есть способ через Handler и Messanger. Сейчас не найду наверно где видел, но на просторах документации по Андройду где-то было "упоминание".
Если вкраце, то там у обоих (Активити и Сервиса), есть обьект Messenger со своим Handler`ом. В этом Хендлере, в метод Handler.handleMessage(Message msg) передается объект Message. А в объект Message можно положить объект, который нужно передать, через Message.obj = yourObject. Сюда же можно положить КОД того, что требуется сделать, через Message.what = START_DOWNLOAD. И сюда же можно положить такой же объект Messanger, которому нужно ответить о результатах или вообще о чём либо, через Message.replyTo = myMessangerInActivity.
Конечно, если много команд, следовательно много what и придётся городить switch-е подобные конструкции, но это пока единственное что я нашёл для обмена чем хочешь, без имплементирования Сериалайзбл, Парселебл и прочих хитрых интерфейсов.

Если вам известны какие то другие способы - было бы интересно их почитать :-)

Constantine
Сообщения: 1
Зарегистрирован: 07 авг 2012, 05:53

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

Сообщение Constantine » 07 авг 2012, 06:09

Можно ли как то отследить процесс установки разных приложений и автоматически посылать уведомления "Было установлено приложение $name, вы согласны оставить его?". Чтобы не приходилось нажимать кнопки Start and Stop.
Помогите пожалуйста.

Аватара пользователя
A.N.R.I
Сообщения: 2
Зарегистрирован: 21 июн 2012, 16:51

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

Сообщение A.N.R.I » 25 авг 2012, 13:20

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

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 30 авг 2012, 17:05

А почему отдельный процесс, а не отдельный поток?

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 30 авг 2012, 17:25

Не появляются уведомления (((
Вроде все, как в примере...
Активити

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

package ru.startandroid.develop.p0991servicenotification;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;

public class Activity_Main extends Activity {

	public final static String FILE_NAME = "filename";

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main);
        
        TextView tv=(TextView)findViewById(R.id.tv);
        Intent intent=getIntent();
        String fileName=intent.getStringExtra(FILE_NAME);
        if (!TextUtils.isEmpty(fileName)) tv.setText(fileName);
    }

    public void onClickStart(View v){
    	startService(new Intent(this,MyService.class));
    }
    
    public void onClickStop(View v){
    	stopService(new Intent(this,MyService.class));
    }
    
}
МайСервис

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

package ru.startandroid.develop.p0991servicenotification;

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;

	public void onCreate(){
		super.onCreate();
		nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
	}
	
	public int onStartComand(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(){
		//Первая часть
		Notification notif=new Notification(R.drawable.ic_launcher,"Text in status bar",System.currentTimeMillis());
		
		//Третья часть
		Intent intent=new Intent(this,Activity_Main.class);
		intent.putExtra(Activity_Main.FILE_NAME, "someFile");
		PendingIntent pIntent=PendingIntent.getActivity(this, 0, intent, 0);
		
		//Вторая часть
		notif.setLatestEventInfo(this, "Заголовок уведомления", "Тексттексттекст уведомления", pIntent);
		
		//Удаление уведомления после нажатия
		notif.flags|=Notification.FLAG_AUTO_CANCEL;
		
		//Отправка
		nm.notify(1,notif);
	}
	
	public IBinder onBind(Intent intent) {
		return null;
	}

}

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 30 авг 2012, 17:51

Все супер, спасибо за статью, у меня только не вызвалась вибрация, а все остальное сработало как часы. =)

Самая оптимальная установка

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

notif.defaults = Notification.DEFAULT_ALL;
UPD: разобрался с вибро, нужно было программе получить права на вибро в манифесте:

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

<uses-permission android:name="android.permission.VIBRATE"/>
Думаю стоит это указать в примечаниях к статье.

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 30 авг 2012, 20:11

А ты делал, все как в уроке? Блин...почему же у меня ничего не вылезает (

etlt
Сообщения: 8
Зарегистрирован: 30 авг 2012, 20:19

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

Сообщение etlt » 30 авг 2012, 20:25

Подскажите: как при клике на уведомление вызвать тот же самый экземпляр Activity?

Опишу проблему: Из активити запускается сервис который вызывает уведомление, однако при клике на уведомление открывается тоже самое Активити, НО новое т.е. в итоге имеем 2 одинаковые запущенные активи, а нужно чтобы из уведомление вызывалось только 1 активити

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 30 авг 2012, 20:53

etlt писал(а):Подскажите: как при клике на уведомление вызвать тот же самый экземпляр Activity?

Опишу проблему: Из активити запускается сервис который вызывает уведомление, однако при клике на уведомление открывается тоже самое Активити, НО новое т.е. в итоге имеем 2 одинаковые запущенные активи, а нужно чтобы из уведомление вызывалось только 1 активити
Вот сам сегодня с этим же столкнулся, решение тут: viewtopic.php?f=35&t=1159

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

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

Сообщение neoksi » 30 авг 2012, 20:59

powercat писал(а):А ты делал, все как в уроке? Блин...почему же у меня ничего не вылезает (
Нет, я просто на основе урока добавил функционал в свой сервис.

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 31 авг 2012, 10:39

Блин...чего ж у меня не хочет работать (((((

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 31 авг 2012, 11:13

Пишет в логе
show statusicon on inactive inputconnection

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

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

Сообщение powercat » 31 авг 2012, 11:42

В общем - жду ответа автора урока, в чем проблема у меня может быть?

Ответить