Popular Post Kline777 Posted April 1, 2014 Popular Post Report Share Posted April 1, 2014 Como prometido, voltei a virar as minhas atenções para o desenvolvimento de uma aplicação android, feita em delphi, para listar/sacar/ver as edições da revista do Portugal a Programar. Pela info que recolhi no post do thoga31 sobre o que fez em linux http://www.portugal-a-programar.pt/topic/64697-programar-downloader-for-linux/ A minha abordagem será algo simples: Actualizar a informação das revistas online e guardar os dados necessários localmente. A actualização será: Fazer o download do ficheiro XML gentilmente fornecido pelo Sérgio Ribeiro Interpretar o XML e fazer o download das miniaturas de cada revista (processo rápido) Ao abrir/actualizar a aplicação, será mostrada a listagem das revistas para selecção, onde as poderemos ver com mais detalhe e abrir o seu PDF, caso exista, ou fazer o download. Front-End: A app vai ter 4 screens: Splash screen: Algo para entreter os utilizadores e desviar as atenções do arranque das apps do firemonkey 😛 Actualizar dados: Um screen com apenas um botão para actualizar a informação das edições online, com opção para fazer logo o download do pdf da edição ou nao. Listagem de Edições: Lista completa das edições da revista, cada uma com a sua miniatura correspondente. A partir deste screen podemos seleccionar uma revista e passar para o screen seguinte. Detalhe de Edição: Miniatura maior da revista, botão para download/abrir o pdf da revista e a listagem dos seus artigos. Eu vou acrescentando aqui coisas até haver uma versão funcional como eu desejo. Até lá, por favor, estou aberto a sugestões/colaborações e afins 🙂 Que outras funcionalidades pensam poder ser interessantes? 3 Report Link to comment Share on other sites More sharing options...
nunopicado Posted April 1, 2014 Report Share Posted April 1, 2014 Vê se é possível que ele faça a actualização automaticamente em background (tipo serviço), e criar uma notificação se encontrar algo novo... 😉 "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
thoga31 Posted April 1, 2014 Report Share Posted April 1, 2014 (edited) Vê se é possível que ele faça a actualização automaticamente em background (tipo serviço), e criar uma notificação se encontrar algo novo... 😉 Concordo. MAS! 😄 A adicionar aos 4 screens propostos, sugiro mais 1: definições. Falo a nível pessoal: abomino aplicações telepáticas armadas em Maya a ler os astros e a pensar saberem o que eu quero. Já chega a panóplia de espelunca desse e de outros géneros que inunda a Play Store, e não gostaria de ver esta aplicação ser mais uma. 🙂 Neste screen uma pessoa podia personalizar brevemente a aplicação, e entre as opções seria a actualização automática. Mais, se autorizarmos esta funcionalidade, podemos querer desligá-la caso estejamos a trabalhar em modo de troca de dados (aka 3G ou 4G). Todos sabemos que os MB's não abundam nestes serviços, e, mesmo que o XML não seja pesado, todo o KB pode contar. Em suma: screen de definições, e entre elas a opção de actualização automática e para a qual, se activa, autorizo o seu processamento com 3G/4G ou não. 😉 Edited April 1, 2014 by thoga31 Knowledge is free! Link to comment Share on other sites More sharing options...
Kline777 Posted April 1, 2014 Author Report Share Posted April 1, 2014 Pois... ainda nao quis complicar essa parte, por isso, e para as pessoas como o Thoga31 preferi obrigar a carregarem no botao para actualizar. Bem, sem ligar muito ao layout já consigo fazer facilmente a parte sacar o XML, construir uma lista de TEdicoes a partir dela, listar e ver os detalhes. E para minha alegria, tirando a parte do loading, está bastante fluida. Queria ver se hoje ainda fazia a parte de sacar o PDF e visualiza-lo Link to comment Share on other sites More sharing options...
nunopicado Posted April 1, 2014 Report Share Posted April 1, 2014 A partir do momento que haja automatismos, o ecrã de definições é imprescindível. Mas claro, isso pode ficar para o fim. Antes de mais, a parte que disseste (Kline), é quanto basta. "A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!" > Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum. Link to comment Share on other sites More sharing options...
thoga31 Posted April 1, 2014 Report Share Posted April 1, 2014 (edited) Pois, a sugestão dos automatismos e definições é um acrescento posterior. O importante é conseguir comunicar com o servidor, detectar as edições, obter as informações, fazer o download desejado e armazenar os PDF's. Não estou muito dentro da questão do funcionamento do Android, mas quando uma pessoa tem um cartão no smartphone ou no tablet, talvez não fosse má ideia perguntar onde quer guardar. Ou então colocar o directório nas definições. Mais, quando o utilizador decidisse mudar o directório-destino, e caso houvesse lá PDF's, perguntar-se-ia se se quer que estes sejam transferidos para a nova pasta. Mais uma vez, uma ideia para depois. 😉 Edited April 1, 2014 by thoga31 Knowledge is free! Link to comment Share on other sites More sharing options...
CrominhO Posted April 2, 2014 Report Share Posted April 2, 2014 Eu acho brutal a iniciativa 😄 e tendo em conta que só tenho tempo pa ver revistas quando me sento um bocadinho no café e normalmente evito levar Portateis, vou sem duvida ser Cliente da tua Aplicação 😄 As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
Kline777 Posted April 2, 2014 Author Report Share Posted April 2, 2014 Bem ontem lá consegui por a sacar o PDF facilmente para o cartão e criar um intent para abrir o PDF com o programa default do android. Mas o gajo diz que o ficheiro nao existe -.- mais uma guerra para logo á noite. Deve ser qualquer coisa com os separadores caminhos dos ficheiros no Java Link to comment Share on other sites More sharing options...
bioshock Posted April 2, 2014 Report Share Posted April 2, 2014 Bem ontem lá consegui por a sacar o PDF facilmente para o cartão e criar um intent para abrir o PDF com o programa default do android. Mas o gajo diz que o ficheiro nao existe -.- mais uma guerra para logo á noite. Deve ser qualquer coisa com os separadores caminhos dos ficheiros no Java Porque possivelmente tens de utilizar double backslash. Link to comment Share on other sites More sharing options...
Kline777 Posted April 2, 2014 Author Report Share Posted April 2, 2014 (edited) Basicamente tenho uma var com o caminho do ficheiro. Este caminho usa os separadores do SO para o qual está compilado, o delphi trata disso. Se eu chamar o fileexists ele devolve true, se eu navegar no android consigo encontrar e abrir manualmente o pdf que quero. Mas se eu chamar a função para abrir o ficheiro a partir da APP, abre o OfficeSuite e dá erro a dizer que o ficheiro nao existe. O ficheiro com o caminho: /mnt/sdcard/Downloads/RevistasPAP/EdicaoN1/Edicao1.pdf Ja tentei com todas as outras barras... que me faltará? Não sei se quem faz em Java é parecido com isto: {$IFDEF ANDROID} Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setDataAndType(StrToJURI(fPDFPath), StringToJString('application/pdf')); SharedActivity.startActivity(Intent); {$ENDIF ANDROID} deve ser qualquer coisa parva... bioshock, as barras a q t referes iriam aonde ? Edited April 2, 2014 by Kline777 Link to comment Share on other sites More sharing options...
CrominhO Posted April 2, 2014 Report Share Posted April 2, 2014 deve ser qualquer coisa parva... bioshock, as barras a q t referes iriam aonde ? case sensitive ? Short name? ansistring to string ? não sei tou só a mandar para o ar os problemas que possam existir 🙂 As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
bioshock Posted April 2, 2014 Report Share Posted April 2, 2014 As barras a que me refiro iriam para a variável do ficheiro. Por norma deveria de ser assim: \\ficheiros\\ficheiro.pdf Mas se ele te encontra o ficheiro e a variável que recebe o caminho do ficheiro permanece inalterado..o problema, provavelmente, não está no caminho. Já agora, já experimentaste abrir com outra aplicação o pdf? Pelo código que aí tens presumo que ele esteja a assumir por defeito o OfficeSuite ? Link to comment Share on other sites More sharing options...
CrominhO Posted April 2, 2014 Report Share Posted April 2, 2014 Eu acho que o problema está na Conversão da String do caminho 😞 Tenta com este Kline, se reparares como eu disse lá em cima ele passa o caminho por Pchar. procedure openURL(url:String); implementation uses {$IF defined(IOS)} // and NOT defined(CPUARM) FMX.Helpers.iOS, iOSapi.Foundation; {$ELSEIF defined(ANDROID)} Androidapi.JNI.GraphicsContentViewText, FMX.Helpers.Android; {$ELSE} Winapi.Windows, Winapi.ShellAPI; {$ENDIF} {$IF defined(IOS)} // and NOT defined(CPUARM) procedure openURL(url:String); begin SharedApplication.openURL(TNSURL.Wrap(TNSURL.OCClass.URLWithString(NSSTR(PChar(String(url)))))); end; {$ELSEIF defined(ANDROID)} procedure openURL(url:String); var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setData(StrToJURI(url)); SharedActivity.startActivity(Intent); end; {$ELSE} procedure openURL(url:String); begin shellExecute(0, 'open', PWideChar(url), nil, nil, SW_SHOW); end; {$ENDIF} end. E neste aqui ele faz um Encode na String, uses ... IdGlobalProtocols,{$IFDEF MSWINDOWS},WinFolderSelectUtils {$ENDIF} {$IFDEF MSWINDOWS },WinAPI.ShellApi,WinAPI.Windows {$ENDIF} {$IFDEF ANDROID} ,FMX.Helpers.Android,Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.Net,Androidapi.JNI.JavaTypes,idUri,Androidapi.IOUtils {$ENDIF ANDROID} {$IFDEF IOS} ,iOSapi.Foundation,FMX.Helpers.iOS {$ENDIF IOS}; function OpenURLorFile(URL:string;const DisplayError:Boolean = False):Boolean; {$IFDEF MSWINDOWS} begin ShellExecute(0,‘OPEN’,PChar(URL),”,”,SW_SHOWNORMAL); end; {$ELSE} {$IFDEF ANDROID} var Intent:JIntent; idMimeTable:TIdMimeTable; begin // There may be an issue with the geo:prefix and URLEncode. // will need to research if URl.toLower.StartsWith(‘http://’) then Begin Intent:= TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(URL)))); End Else Begin try idMimeTable:= TidMimeTable.Create; Intent:= TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); if not url.ToLower.StartsWith(‘file://’) then url:= ‘file://’ + url; Intent.setDataAndType(StrToJURI(Url), StringToJString(idMimeTable.GetFileMIMEType(Url))); Finally try idMimeTable.Free;except end; End; End; try SharedActivity.startActivity(Intent); exit(true); except on e:Exception do begin if DisplayError then ShowMessage(‘Error:‘ + e.Message); exit(false); end; end; end; {$ELSE} {$IFDEF IOS} var NSU:NSUrl; begin // iOS doesn’t like spaces,so URL encode is important. NSU:= StrToNSUrl(TIdURI.URLEncode(URL)); if SharedApplication.canOpenURL(NSU) then exit(SharedApplication.openUrl(NSU)) else begin if DisplayError then ShowMessage(‘Error:Opening "’ + URL + ‘"not supported.’); exit(false); end; end; {$ELSE} begin raise Exception.Create(‘Not supported!’); end; {$ENDIF IOS} {$ENDIF ANDROID} {$ENDIF WINDOWS} As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
Kline777 Posted April 2, 2014 Author Report Share Posted April 2, 2014 (edited) GRRRR que nervos!! já deu... acho que me deste a resposta sem querer CrominhO 😛 Faltava o 'File://' antes do URL. De resto funciona só mesmo com aquele codigo que pus cima, nao é preciso converter nada de strings Bioshock, sim já tinha tentado com outros programas... afinal era mesmo só disto. Obrigado pessoal, a ver se 6a já mostro qq coisa. A lógica da coisa tá feita... agora é melhorar a utilização. Edited April 2, 2014 by Kline777 1 Report Link to comment Share on other sites More sharing options...
CrominhO Posted April 3, 2014 Report Share Posted April 3, 2014 (edited) GRRRR que nervos!! já deu... acho que me deste a resposta sem querer CrominhO 😛 (...) Não eu sabia que era o File, só não disse para ver se tavas atento loOl 😛😁 ... tou brincar 😛 mas por acaso foi mesmo burrice da minha parte nem ter olhado como deve ser po código, porque ele na url tal como no browser tem de ter o http ou o file pa aceder... mas tava a embirrar com a conversão da string lool 🙂 Edited April 3, 2014 by CrominhO As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
Kline777 Posted April 3, 2014 Author Report Share Posted April 3, 2014 Não eu sabia que era o File, só não disse para ver se tavas atento loOl 😛😁 ... Lool nice... pelos vistos estava ^^. Obrigado 😉 1 Report Link to comment Share on other sites More sharing options...
Kline777 Posted April 8, 2014 Author Report Share Posted April 8, 2014 Alguns screenshots da app até agora... nada final 2 Report Link to comment Share on other sites More sharing options...
Popular Post Kline777 Posted April 15, 2014 Author Popular Post Report Share Posted April 15, 2014 (edited) Bem... tenho que fazer uma pausa de algumas semanas neste projecto (passatempo vá 😛 ) por isso publiquei já na Google Play para quem quiser experimentar. https://play.google.com/store/apps/details?id=com.KLN.PaPDownloader Ainda não consegui fazer testes noutros dispositivos por isso a lista de bugs deve ser grandita 😛 e não esquecer as limitações do firemonkey. Quem quiser, que experimente e me dê algum feedback. Basta arrancar a app, com net ligada e fazer 'actualizar agora'. Depois é navegar pela lista e escolher a edição (1 toque para seleccionar, 2 para abrir) Se alguém quiser o código é só dizer 😉 Edited April 15, 2014 by Kline777 3 Report Link to comment Share on other sites More sharing options...
CrominhO Posted April 15, 2014 Report Share Posted April 15, 2014 humm já ia todo guloso pa ver a app mas no meu não corre 🙂 versão não compatível com o seu equipamento 🙂 mas o teu jogo corre 🙂 As mentes humanas são realmente um local estranho! Link to comment Share on other sites More sharing options...
Kline777 Posted April 16, 2014 Author Report Share Posted April 16, 2014 A serio?? Supostamente a lista de compatibilidade seria igual. Compilei no mm sistema. O meu Android é o 2.3 e nunca se queixou :/ Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now