Страница 1 из 8

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

Добавлено: 25 июл 2012, 23:00
damager82
В этом уроке:
- шлем уведомление из сервиса


Click here to read this article!

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 05 авг 2012, 16:03
Observer
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-е подобные конструкции, но это пока единственное что я нашёл для обмена чем хочешь, без имплементирования Сериалайзбл, Парселебл и прочих хитрых интерфейсов.

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

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

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

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

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

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

Добавлено: 30 авг 2012, 17:05
powercat
А почему отдельный процесс, а не отдельный поток?

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

Добавлено: 30 авг 2012, 17:25
powercat
Не появляются уведомления (((
Вроде все, как в примере...
Активити

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

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;
	}

}

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

Добавлено: 30 авг 2012, 17:51
neoksi
Все супер, спасибо за статью, у меня только не вызвалась вибрация, а все остальное сработало как часы. =)

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

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

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

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

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

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

Добавлено: 30 авг 2012, 20:11
powercat
А ты делал, все как в уроке? Блин...почему же у меня ничего не вылезает (

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

Добавлено: 30 авг 2012, 20:25
etlt
Подскажите: как при клике на уведомление вызвать тот же самый экземпляр Activity?

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

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

Добавлено: 30 авг 2012, 20:53
neoksi
etlt писал(а):Подскажите: как при клике на уведомление вызвать тот же самый экземпляр Activity?

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

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

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

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

Добавлено: 31 авг 2012, 10:39
powercat
Блин...чего ж у меня не хочет работать (((((

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

Добавлено: 31 авг 2012, 11:13
powercat
Пишет в логе
show statusicon on inactive inputconnection

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

Добавлено: 31 авг 2012, 11:42
powercat
В общем - жду ответа автора урока, в чем проблема у меня может быть?