Jump to content

P@P Downloader - Android


Kline777
 Share

Recommended Posts

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

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 by thoga31

Knowledge is free!

Link to comment
Share on other sites

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

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

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 by thoga31

Knowledge is free!

Link to comment
Share on other sites

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

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

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

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 by Kline777
Link to comment
Share on other sites

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

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

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

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 by Kline777
  • Vote 1
Link to comment
Share on other sites

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 by CrominhO

As mentes humanas são realmente um local estranho!

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.