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!