[RESOLVIDO]Notificar o usuário periodicamente - Atualizar Activity

Bom dia,

Tenho um sistema que o usuário se cadastra em um evento e quando terminar de realizar suas ações tem que fecha-lo, isso pode demorar até 8 horas,
então criei uma notificação que deveria ser disparada a cada meia hora para lembra-lo que há um evento aberto
Tentei criar isso diretamente na activity com Handler e postDelayed mas não obtive resultado(não atualizou a activity), então queria saber se há uma forma de atualizar a activity para enviar essa notificação, ou criar esse método separadamente.

Obrigada.

Rapaz nunca trabalhei com isso, mas vê a possibilidade de sua activity ser um serviço.

Criei o service para rodar junto com a minha activity, mas parece q ele não esta rodando junto, ele responde quando entra no sistema, mas depois não responde mais…

[code]package br.com.apontamento;

import java.sql.Date;
import java.sql.Timestamp;

import br.com.apontamento.DAO.ApontamentoDAO;
import br.com.apontamento.Notificacao;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class ServiceNotificacao extends Service{

@Override
 public void onStart(Intent intent, int startId) {
	 System.out.println("entro no service??????????????????????????");
	 enviaNotificacao();
	// stopSelf();
 }

//MÉTODO PARA ENVIAR UMA NOTIFICAÇÃO A CADA MEIA HORA, ENQUANTO O EVENTO ESTIVER ABERTO
public void enviaNotificacao() {
	ApontamentoDAO aDao = new ApontamentoDAO(ServiceNotificacao.this);
	if (aDao.bGetEventoAberto(LoginActivity.registro_funcionario)) {
		Timestamp agora = new Timestamp(new Date(System.currentTimeMillis()).getTime());
		int codigo_evento = aDao.iGetEventoAberto(LoginActivity.registro_funcionario);
		System.out.println("e o mod................................" + (((agora.getTime() - aDao.dataInicioApontamento(codigo_evento).getTime())/60000) % 2));
		if ((((agora.getTime() - aDao.dataInicioApontamento(codigo_evento).getTime())/60000) % 2) == 0) {
			try {
				Thread.sleep(1000);
				//DEFINE A INTENT RESPONSÁVEL POR PASSAR OS PARAMETROS NECESSÁRIOS
		        //PARA CRIAR UMA NOTIFICAÇÃO
		        Intent it = new Intent();
		        it.putExtra(Notificacao.INTENT_STRING_MSG, "O EVENTO " + codigo_evento + " ESTÁ ABERTO A " + (agora.getTime() - aDao.dataInicioApontamento(codigo_evento).getTime())/60000 + " MINUTOS");
		        it.putExtra(Notificacao.INTENT_STRING_MSG_STATUS, "EVENTO ABERTO");
		        it.putExtra(Notificacao.INTENT_STRING_TITULO, "APONTAMENTO");
		        it.putExtra(Notificacao.INTENT_LONG_QUANDO, System.currentTimeMillis());
		        it.putExtra(Notificacao.INTENT_INT_ICONE, android.R.drawable.ic_menu_week);
		        Intent i = new Intent(Intent.ACTION_VIEW);
		        //LIMPA A ANTERIOR PARA MANDAR UMA NOVA
		        NotificationManager notificationManager = (NotificationManager)getSystemService(this.NOTIFICATION_SERVICE);
				notificationManager.cancel(550);
				EventoActivity e = new EventoActivity();
		        Notification notf = Notificacao.criarNotificacao(e, it, i, Notificacao.TIPO_ACTIVITY);
		        //MANDA NOTIFICAR
		        Notificacao.notificar(e, notf, 550);
			} catch (Exception e) {
				e.printStackTrace();
				throw new RuntimeException("ERRO: " + e.getMessage());
			}
		}
	}
}

//COMUNICAÇÃO ENTRE MÉTODOS, É OBRIGATÓRIO
@Override
public IBinder onBind(Intent intent) {
	return null;
}

}
[/code]

no mainfest declarei assim:

<service android:name="ServiceNotificacao"> <intent-filter> <action android:name="INICIAR_SERVICO" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service>

e na activity chamei assim: //STARTA SERVIÇO DE VERIFICAÇÃO DE NOTIFICAÇÕES startService(new Intent("INICIAR_SERVICO"));

Alguma dica?

Em vez de um service mesmo, eu acredito que um IntentService seria melhor. IntentService funciona como uma thread, quando sua função chegar ao fim o serviço é automaticamente finalizado.

Neste caso, você poderia disparar uma intentService no seu onPause para notificar e quando o usuário voltasse para sua activity enviar uma mensagem para o service para avisar que ela pode ser finalizada. Assim, evita que um service fique em memoria sem necessidade enquanto o usuário esteja com foco em sua aplicação.

Eu gostaria de notificar meu usuário a cada meia hora e não só no momento que ele entra na activity,
Na classe service estou com um problema na hora de enviar parâmetros para criar a notificação, a notificação requer uma activity
e se eu envio como this apenas da erro…

Como é feita a notificação ? dialog ?

Se for você pode fazer o serviço iniciar uma activity sem UI e dela chamar a dialog.

ou pode ser algo menos invasivo, utilizar foreground notification.

Arrumei aqui, em vez de chamar a notificação usando como parâmetro a activity, chamei usando o service,
Obrigada!