Boa tarde pessoal, estou trabalhando em um app Android para uma empresa, me pediram para colocar um validador de data, teria que funcionar até a data especificada na codificação, após isso tera que apresentar uma mensagem com instruções de compra, estou tentando utilizando a função GregorianCalendar, mas independente da data que coloco o APP esta iniciando normalmente e não esta apresentando a mensagem de aviso. A chamada do método esta no splash, segue o método abaixo. Desde já muito obrigado.
privatevoidvalidador(){//Validação simples para TRIALtry{if(newDate(0).after(newGregorianCalendar(2015,11,1).getTime())){//Define a data de expiraçãoAlertDialog.Builderad=newAlertDialog.Builder(this);ad.setTitle("App Teste");ad.setMessage("O tempo de avaliação está expirado. entre em contato para adiquirir a versão final.");ad.setPositiveButton("Contratar",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){Intenti=newIntent(Intent.ACTION_VIEW,Uri.parse("http://www.teste.com.br"));startActivity(i);finish();}}).show();}}catch(Exceptione){/* handle any exceptions */return;}}
RESOLVIDO -
Coloquei a linha e o problema foi solucionado, estava comparando com date que já foi descontinuado: if (new GregorianCalendar().after(new GregorianCalendar(2015,11,24)))
Só um detalhe, Nesse tipo de validação é verificado a data no SO. Sendo assim se o usuário alterar a data (para uma data anterior) ele conseguirá utilizar o app sem problemas.
Para uma validação mais efetiva é interessante que seja verificada a data de um servidor em comparação a um parâmetro de dataLimite definido durante a instalação do app.
fica a dica
F
fabiomarcilio
Bem colocado Diego_Melo, nunca trabalhei com esse tipo de validação, recomenda algum servidor para fazer a verificação? e como implementar? o servidor é chamado no lugar do GregorianCalendar?
Desde já obrigado
D
Diego_Melo
o seu app não se comunica com nenhum server?
Se sim você simplesmente obtém a data desse server.
F
fabiomarcilio
O App não tem necessidade de se comunicar com um server, mas se for possível a comunicação só para validar a data/hora seria bem interessante.
D
Diego_Melo
eu tava pesquisando uma para sobre datas aqui e acabei descobrindo esse site
Ali você consegue informações de data e hora de qualquer lugar do mundo.
É perfeito pro seu caso, pois você não precisa esquentar a cabeça de ter que levantar um server só para isso
F
fabiomarcilio
Bom dia Diego, voltei a mexer com o projeto em questão, na verdade pensando sobre a situação que você me indicou creio que não seja viável no meu caso pois o app terá que trabalhar mesmo na ausência de internet, assim a conexão com um servidor externo não vai resolver.
Pensando nisso estou tentando fazer uma validação gravando a data do primeiro acesso em um arquivo texto e assim fazer o controle partindo desse arquivo, só que não estou tendo muito sucesso, ele cria o arquivo em branco.
segue o código abaixo:
if(linha.isEmpty()){DatedataArquivo=formataData(linha);Datedata=newGregorianCalendar().getTime();intresult=dataArquivo.compareTo(data);if(result>1){AlertDialog.Builderad=newAlertDialog.Builder(this);ad.setTitle("Teste");ad.setMessage("O tempo de avaliação está expirado..");ad.setPositiveButton("Fechar",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){finish();}}).show();}return;}else{Datedata=newGregorianCalendar().getTime();SimpleDateFormatformataData=newSimpleDateFormat("dd/MM/yyyy");StringconteudoArquivo=formataData.format(data);arquivoGravar.write(conteudoArquivo.getBytes());arquivoGravar.flush();arquivoGravar.close();}br.close();}
Teria que criar o arquivo caso não exista, caso exista verificar se está vazio, caso esteja terá que gravar a data do dia no arquivo. No segundo if que acho que estou meio perdido com o compareTo, pois ali eu faço a leitura do conteúdo do arquivo, converto para date e faço a comparação. Gostaria de ter a quantidade de dias entre as determinadas datas, assim conseguiria limitar o uso da demo ex: para 15 dias.