[RESOLVIDO]Notificar o usuário periodicamente - Atualizar Activity
6 respostas
elisedalbello
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.
Rapaz nunca trabalhei com isso, mas vê a possibilidade de sua activity ser um serviço.
elisedalbello
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...
packagebr.com.apontamento;importjava.sql.Date;importjava.sql.Timestamp;importbr.com.apontamento.DAO.ApontamentoDAO;importbr.com.apontamento.Notificacao;importandroid.app.Notification;importandroid.app.NotificationManager;importandroid.app.Service;importandroid.content.Intent;importandroid.os.IBinder;publicclassServiceNotificacaoextendsService{@OverridepublicvoidonStart(Intentintent,intstartId){System.out.println("entro no service??????????????????????????");enviaNotificacao();// stopSelf();}//MÉTODO PARA ENVIAR UMA NOTIFICAÇÃO A CADA MEIA HORA, ENQUANTO O EVENTO ESTIVER ABERTOpublicvoidenviaNotificacao(){ApontamentoDAOaDao=newApontamentoDAO(ServiceNotificacao.this);if(aDao.bGetEventoAberto(LoginActivity.registro_funcionario)){Timestampagora=newTimestamp(newDate(System.currentTimeMillis()).getTime());intcodigo_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ÇÃOIntentit=newIntent();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);Intenti=newIntent(Intent.ACTION_VIEW);//LIMPA A ANTERIOR PARA MANDAR UMA NOVANotificationManagernotificationManager=(NotificationManager)getSystemService(this.NOTIFICATION_SERVICE);notificationManager.cancel(550);EventoActivitye=newEventoActivity();Notificationnotf=Notificacao.criarNotificacao(e,it,i,Notificacao.TIPO_ACTIVITY);//MANDA NOTIFICARNotificacao.notificar(e,notf,550);}catch(Exceptione){e.printStackTrace();thrownewRuntimeException("ERRO: "+e.getMessage());}}}}//COMUNICAÇÃO ENTRE MÉTODOS, É OBRIGATÓRIO@OverridepublicIBinderonBind(Intentintent){returnnull;}}
//STARTA SERVIÇO DE VERIFICAÇÃO DE NOTIFICAÇÕESstartService(newIntent("INICIAR_SERVICO"));
Alguma dica?
fabriciov
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.
elisedalbello
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…
fabriciov
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.
elisedalbello
Arrumei aqui, em vez de chamar a notificação usando como parâmetro a activity, chamei usando o service,
Obrigada!