Ótimas Dicas Mobile Delphi XE5
March 3, 2017 | Author: emarquesc | Category: N/A
Short Description
Download Ótimas Dicas Mobile Delphi XE5...
Description
OBTER O IMEI DE DISPOSITIVO ANDROID COM DELPHI XE5 Quando se fala de Mobilidade garantir que informações corporativas sejam visualizadas apenas por “pessoal” autorizado é essencial. Nessa postagem vamos implementar a autenticação de uma aplicação Delphi XE5 Android através doIMEI do dispositivo.
IMEI a identificação do dispositivo IMEI é o acrônimo de Mobile Equipment Identity (Identificação Internacional de Equipamento Móvel). Trata-se de uma sequência de números e caracteres especiais única para cada dispositivo. A ideia é bem parecida com o MAC address das placas de rede. Isso facilita na hora de localizar um aparelho específico em meio às centenas de dispositivos colocados no mercado todos os meses.
Criando a aplicação Mobile Delphi XE5 Crie um novo projeto Mobile no Delphi XE5. No fonte do form da aplicação vamos adicionar as seguintes referências na clausula uses: uses FMX.Platform.Android, Androidapi.JNI.Telephony, Androidapi.JNI.Provider , Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, FMX.Helpers.Android;
No form vamos adicionar um Button, alterar sua propriedade Textpara “Capturar IMEI” e a propriedade Name para btnCapturarIMEI.
Vamos codificar seu evento onClick como abaixo: procedure TForm1.btnCapturarIMEIClick(Sender: TObject); var obj: JObject; tm: JTelephonyManager; IMEI: String; begin obj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE); if obj nil then begin tm := TJTelephonyManager.Wrap( (obj as ILocalObject).GetObjectID ); if tm nil then IMEI := JStringToString(tm.getDeviceId); end; if IMEI = '' then IMEI := JStringToString(TJSettings_Secure.JavaClass.getString(SharedActivity.getContentResolver, TJSettings_Secure.JavaClass.ANDROID_ID)); ShowMessage('IMEI :' + #13 + IMEI); end;
Fácil… extremamente fácil… Execute a aplicação e clicando sobre o botão o IMEI do seu dispositivo será exibido.
Vimos como é fácil capturar o IMEI através de uma aplicação Android Delphi XE5. Implementando um banco de dados contendo os IMEI's autorizados e fazendo uma pesquisa neles você pode garantir o acesso apenas aos dispositivos previamente cadastrados no seu servidor de aplicação.
É isso… simples assim! Até a próxima!
CONTROLE DE GESTOS NO ANDROID COM DELPHI XE5 Com a popularização dos smartfones e consolidação das telas touch screen ter em sua aplicação funções acionadas pelo comportamento de deslizar o dedo sobre a tela pode representar um grande diferencial de sua aplicação. Nessa postagem vamos criar uma aplicação Android com Delphi XE5que será capaz de captar os gestos do usuário na tela do dispositivo.
Criando a aplicação e adicionando os componentes Vamos iniciar uma nova aplicação Mobile em Branco no Delphi XE5, como já fizemos este procedimento em várias postagens anteriores vamos pular essa parte, e nesta aplicação vamos inserir os componentes: 1 ToolBar, 1 Label(insira dentro da ToolBar), 1 TabControl, e 1Panel.
Uma vez adicionados os componentes em nossa aplicação, para que sua interface fique parecida com a figura acima vamos configurar suas propriedades como abaixo:
ToolBar1
Align –> alTop
Label1
Text –> Gestos com Delphi XE5
TextAlign –> taCenter
TabControl1
Align –> alBottom
TabPosition –> tpBottom
Panel1
Align –> alClient
StyleLookup –> calloutpanelstyle
Agora vamos clicar com o botão direito do mouse sobre oTabControl1 e adicionar 3 novos TabItem, após adicionados vamos alterar a propriedade Text de cada um deles:
TabItem1.Text –> Esquerda
TabItem2.Text –> Central
TabItem3.Text –> Direita
GestureManager a gestão dos gestos Para que os gestos sejam interpretados por nossa aplicação precisamos adicionar ainda um GestureManager. Selecione o Panel1e vamos associar sua propriedade Touch.GestureManager e habilitar suas Gestures Standard: Left, Right, Down e Up. Veja na imagem abaixo:
Codificando a captação do Gestos Apenas para garantir que nossa aplicação sempre seja inicializada com a TabItem“Central” ativa em nosso TabControl vamos inserir o seguinte código no evento onActivate do Form1: procedure TForm1.FormActivate(Sender: TObject); begin TabControl1.TabIndex := 1; end;
E para os gestos serem interpretados pela aplicação vamos inserir no evento onGesture do Painel1 o código:
procedure TForm1.Panel1Gesture(Sender: TObject; const EventInfo: TGestureEventInfo; var Handled: Boolean); var Gesto : string; begin if GestureToIdent(EventInfo.GestureID, Gesto) then begin case EventInfo.GestureID of sgiLeft : TabControl1.TabIndex := 0; sgiRight: TabControl1.TabIndex := 2; sgiDown : TabControl1.TabIndex := 1; sgiUp : ShowMessage('Você utilizou o gesto para cima: ' + Gesto); end; end; end;
Após a todos os componentes configurados e os códigos acima inseridos essa será a aparência do projeto
Executar e entender o funcionamento da aplicação Agora basta executar a aplicação no emulador ou diretamente no seu dispositivo Android e conferir o resultado. Basicamente trocamos asTabItens com o movimento dos dedos sobre o Panel1:
Deslizando para a direita acionamos a TabItem “Direita”
Deslizando para a esquerda acionamos a TabItem “Esquerda”
Deslizando para baixo vamos para a TabItem “Central”
Deslizando para cima é exibida uma mensagem contendo a constante que denomina o gesto acionado
Agora é adaptar o modelo à sua necessidade e mandar ver!
INTENTS COM DELPHI XE5 COMUNICANDO APPS ATRAVÉS DO ANDROID Tanto em desktop quanto mobile, no desenvolvimento por diversas vezes temos a necessidade de nossa aplicação interagir com outras aplicações da plataforma alvo de nosso desenvolvimento. Aquele relatório que precisa ser exportado e visualizado em Excel na plataforma Desktop é um exemplo que quase todo desenvolvedor já teve implementar.
Intent, aqui bate o coração Quando falamos de mobile, em Android sendo mais específico, poder interagir com os recursos do sistema por si só, já pode dar ao usuário de nossa aplicação um ganho significativo de experiência de uso. Já citamos aqui alguns casos de como fazer nossa aplicação interagir com o Android, porém na postagem de hoje traremos a tona a classe que é tida como o coração do sistema Android: a Classe Intent. A classe Intent (android.content.Intent) está presente em todos os lugares e representa uma mensagem da aplicação para o sistema operacional solicitando a este que realize algo. Através dela é possível integrar diferentes aplicações trocando essas mensagens e resultados entre si. O sistema operacional por sua vez interpreta essas mensagens efetuando o que está sendo solicitado, desde a abertura de uma aplicação até mesmo efetuar uma chamada telefônica.
Delphi: criando a interface da aplicação. Inicie um novo projeto Mobile em branco, nele vamos inserir 1 Label, 1 ComboBox, 1 Button. Vamos alterar as propriedades dos componentes como abaixo:
Label1
Text –> Intent‟s no Delphi
TextAling = taCenter
ComboBox1
Itens
Mapa
Telefone
Navegador
Contatos
Button1
Text –> Executar
Em nosso projeto iremos utilizar alguns namespaces para utilizarmos funções do Android, para isso na clausula Uses da seçãoimplementation vamos incluir: Ao final desta etapa teremos nossa aplicação visualmente parecendo-se com a imagem abaixo: uses IdURI, FMX.Helpers.Android, Androidapi.Jni.GraphicsContentViewText, Androidapi.Jni.Net, Androidapi.Jni.JavaTypes;
E como usar as Intents na prática? E no Delphi como seria isso? Nossa aplicação enviará chamadas ao sistema operacional invocando os aplicativos do Google através de pares Ação / URI que definem qual aplicativo está sendo chamado e seu comportamento ao receber a intenção de chamada. A lista completa de Intents para invocar aplicativos do Google em dispositivos Android pode ser checada no link: http://developer.android.com/guide/appendix/g-app-intents.html. Então vamos fazer as coisas acontecerem por aqui! No evento OnClick do nosso Button1 vamos inserir umas variáveis: var uri : string; Intent : JIntent; idContato : Integer;
Basicamente ao clicar no botão o usuário estará solicitando ao dispositivo que execute uma intent préselecionada no ComboBox1. Sendo assim o iremos verificar qual a intent chamada e passar os comandos para a aplicação do Google que desejamos executar. Veja o código (que deve vir imediatamente após a declaração das variáeis acima): begin case ComboBox1.ItemIndex of -1: begin ShowMessage('Selecione uma Intent'); ComboBox1.SetFocus; end; 0: //Mapa begin uri :='geo://0,0?q=Maracana, Rio de Janeiro'; try Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(uri)))); SharedActivity.startActivity(Intent); except on E: Exception do ShowMessage(E.Message); end; end; 1: // Telefone
begin uri :='tel://98390170'; try Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_CALL, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(uri)))); SharedActivity.startActivity(Intent); except on E: Exception do ShowMessage(E.Message); end; end; 2: begin uri:= 'content://com.android.contacts/contacts/'; try Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_PICK, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(uri)))); SharedActivity.startActivityForResult(Intent, 0); except on E: Exception do ShowMessage(E.Message); end; end; 3: // Navegador begin uri :='http://landersongomes.vivaitaocara.com.br'; try Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(uri)))); SharedActivity.startActivity(Intent); except on E: Exception do ShowMessage(E.Message); end; end; end; // case end;
Agora basta executar o programa no dispositivo ou no emulador que já temos nossa aplicação interagindo com as aplicações do Google que acompanham os dispositivos Android.
Explicando os pares: Ação / Uri Como dito acima, os aplicativos do têm sua chamada e comportamentos estabelecidos através dos pares Ação/ Uri, abaixo vamos descrever cada um dos pares utilizados por nós em cada Intent de nossa aplicação:
A Intent Action (Ação) View combinada com a Intent URI (Uri) Geoabre o Google Maps do dispositivo passando a ele as coordenadas ou endereço contidos no restante da URI. Este par foi utilizado então por nossa aplicação quando clicamos no Button1 e o ComboBox teve a opção Mapa selecionada. Fica bem claro quando separamos o código que inicializa nossa variável Intent, veja: Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(uri))));
Os demais casos, acabam tornando-se óbvios, temos: ACTION_CALL combinada com a URI a Tel acrescida de um número de telefone, com isso nossa aplicação efetuará a chamada telefônica para o número informado. Enfim, tudo fica bem mais claro após o entendimento do primeiro caso.
Dê à sua aplicação a “intenção” de interagir com o Android. Agora, vale a pena dar uma olhada na Lista de Intents para invocar aplicativos do Google e adaptar sua aplicação para essas possíveis interações com o Android. Lista completa de Intents: http://developer.android.com/guide/components/intents-common.html Até a próxima.
DELPHI XE5 ENVIANDO SMS DIRETO DE SUA APLICAÇÃO ANDROID Nessa postagem vamos enviar SMS através de uma aplicação Delphi XE5 para Android. Poucas linhas de códigos que podem ser adaptadas à realidade de sua aplicação mobile e torná-la ainda mais agradável a seus usuários.
Criação da Interface da aplicação e Conceder Permissão para Envio de SMS Inicie o Delphi XE5 e crie um novo projeto Mobile em Branco como já fizemos em outras postagens, acesse Menu File –> New –> FireMonkey Mobile Application e em seguida selecione a opçãoBlank Template . Vamos inserir em nosso formulário 1 Label, 1 Edit, 1 Memo e 1 Button. Alteraremos a propriedade Text do Label para “Destinatário”. Ao final teremos a interface da aplicação assemelhando-se à figura abaixo:
Como vamos enviar SMS, precisamos solicitar essa permissão ao Android. Abre-se aqui um parêntese, quando você instala uma aplicação no Android ele sempre informa os recursos que essa aplicação vai usar, por isso vamos setar a permissão para Envio de SMS como verdadeira. No Project Manager selecione o nosso Projeto e clique com o botão direito para que seja exibido o Popup Menu e nele selecione Options (a penúltima opção do menu popup).
As opções do Projeto serão abertas e aí procuraremos por Uses Permissions, note que no quadro à direita estão todas as opções de permissões possíveis a um projeto Android. Vamos procurar nas permissões por Send SMS e setá-la para True, ou seja, acabamos de dizer para o Android que usaremos o envio de SMS.
Feito isso basta clicar em OK e vamos iniciar a codificação de nosso projeto.
Código Delphi… funcionalidade Android Na seção Implementation, em sua cláusula uses vamos adicionar 2 Namespaces que fazem referências a Classes Android e farão com que nosso projeto se comunique com o telefone e reconheça os tipos de dados do Android/Java, são eles respectivamente abaixo: implementation {$R *.fmx} uses Androidapi.Jni.Telephony, Androidapi.Jni.JavaTypes;
No evento OnClick do Button vamos inserir o seguinte código: procedure TForm1.btnEnviarClick(Sender: TObject); var GerenciadorSMS : JSmsManager; begin GerenciadorSMS := TJSmsManager.JavaClass.getDefault; if not Edit1.Text.IsEmpty then begin if not Memo1.Lines.Text.IsEmpty then GerenciadorSMS.sendTextMessage(StringToJString(Edit1.Text), nil, StringToJString(Memo1.Lines.Text), nil, nil ) else ShowMessage('Escreva a mensagem.'); end else ShowMessage('Informe o número de destino para a mensagem.'); end;
Já está pronta nossa aplicação. Acione o Emulador ou conecte um dispositivo Android e execute para conferir o funcionamento.
Traga para sua realidade Na minha postagem Delphi XE5 Efetuando chamadas telefônicas direto de sua aplicação móvel, populamos um ListBox com elementos de um cadastro de fornecedores fictício e a partir dali efetuávamos chamadas telefônicas. Na postagem de hoje, poderíamos pensar de igual forma, com um cadastro de Gerentes ou Vendedores de sua empresa por exemplo e que você precise enviar um SMS a eles. Enfim, a facilidade está disponível, adapte-a à realidade de seu usuário. Até a próxima.
DELPHI XE5 EFETUANDO CHAMADAS TELEFÔNICAS DIRETO DE SUA APLICAÇÃO MÓVEL Sua aplicação Mobile DelphiXE5 efetuando chamada telefônica sem necessidade de consultar a agenda ou outro aplicativo. De a seus usuários ótima experiência. Imagine que você tem uma aplicação móvel que carrega a lista de fornecedores de seu cliente, nessa lista há informações como Nome, Telefone, e-mail, etc. Você pega a informação de telefone e gostaria de usá-la para efetuar uma ligação para esse fornecedor. Você memoriza esse telefone e no aplicativo de discagem do seu smartphone digita esse número para efetuar a chamada. Por que não fazer isso direto de seu aplicativo? O número do fornecedor já está armazenado lá… Vamos ao Delphi XE 5 então?!
Criando a UI (User Interface – Interface do Usuário) Abra o Delphi XE5 e crie Novo Projeto Móvel através do menu File–> New Project –> Delphi Projects –> Mobile Projects. Utilizaremos novamente o modelo de aplicação em branco (Blank Application). Vamos salvar nosso projeto através do Menu File –> Save All (SHIFT +CTRL + S), crie uma pasta denominada prjDiscador para salvarmos nossos arquivos dentro dela. Chamaremos a Unit do formulário defrmDiscadorUnt e o projeto chamaremos Discador. Insira no formulário um Listbox, renomeie-o para lbxFornecedores, clique com o botão direito sobre ele e selecione a opção Add Item.
Vamos adiconar 1 TListBoxHeader e 3 TListboxItem. E configurar suas propriedades como abaixo:
ListBoxItem1
ItemData.Text –> „Banco do Brasil‟
ItemData.Detail –> ‟0800 729 0722′
StyleLookup –> listboxitembottomdetail
ListBoxItem2
ItemData.Text –> „Caixa‟
ItemData.Detail –> ‟0800 726 0101′
StyleLookup –> listboxitembottomdetail
ListBoxItem3
ItemData.Text –> „Loja da Esquina‟
ItemData.Detail –> ”
StyleLookup –> listboxitembottomdetail
Altere a propriedade Align do lbxFornecedores para alClient, assim ele passará a ocupar toda a tela do aplicativo. Quando alteramos as propriedades StyleLookup dos ListBoxItens listboxitembottomdetailfizemos com que a informação do campo Detail passe a ser exibida abaixo do texto principal do item. Agora que já temos os dados de nossos “fornecedores” vamos codificar nossa aplicação dando a ela a funcionalidade proposta na postagem.
Funcionamento e Codificação da aplicação Basicamente a aplicação efetuará a discagem para o item selecionado no lbxFornecedores vamos fazer alguns ajustes no código. Pressione F12 para visualizarmos a Unit e nela vamos inserir na cláusula uses da seção Interface vamos adicionar os seguintes Namespaces: //Namespaces adicionados FMX.PhoneDialer, FMX.Platform;
Vamos ainda acrescentar à definição de nosso Formulário (frmDiscador) uma variável Discador em sua seção private como segue: private { Private declarations } Discador : IFMXPhoneDialerService;
Assim já temos tudo pronto para inserir o código que efetuará a chamada telefônica propriamente dita, para isso codificaremos o evento OnItemClick do lbxFornecedores como abaixo: procedure TfrmDiscador.ListBox1ItemClick(const Sender: TCustomListBox; const Item: TListBoxItem); begin if not Item.ItemData.Detail.IsEmpty then begin TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService, IInterface(Discador)); if Assigned(Discador) then begin Discador.Call(Item.ItemData.Detail); end; end else begin Discador.Call(InputBox('Fornecedor sem número.', 'Informe o número a ser discado', '' )); end; end;
voilà… Execute a aplicação e verá que já temos a chamadas telefônicas acontecendo ao clicar sobre os itens da nossa lista de fornecedores.
Faz-se notar que nosso último fornecedor não tem informado seu número de telefone, quando o campo Detail do item estiver vazio, será exibida uma InputBox solicitando o número a ser discado.
A simplicidade de implementar essa funcionalidade em sua aplicação pode fazer a diferença no cotidiano de seu usuário/cliente, pense nisso. Até a próxima e bons códigos!
SENSOR DE LOCALIZAÇÃO DE DISPOSITIVOS MÓVEIS COM DELPHI XE5 Nesta postagem acessaremos o Sensor de Localização de dispositivos móveis através de uma aplicação desenvolvida com Delphi XE5. Neste tutorial daremos prosseguimento a nossa série de desenvolvimento de aplicações de exemplos utilizando Delphi XE5 para acessar funcionalidades de dispositivos móveis com poucas linhas de código. Nele faremos acesso ao sensor de localização do dispositivo fazendo com que a sua localização seja plotada no mapas através de integração com o Google Maps.
Iniciando o Delphi e preparando a aplicação Iniciaremos o Delphi XE5 e criaremos um Novo Projeto Móvel através do menu File–> New Project –> Delphi Projects –> Mobile Projects. Adotaremos o modelo de aplicação em branco (Blank Application).
Feito isso salvaremos nosso projeto através do menu File –> Save All. Chamaremos a Unit de frmLocalizacaoUnt e o projeto chamaremos de prjLocalizeMe. Agora vamos inserir em nossa aplicação os componentes que farão com que ela fique funcional. Vamos adicionar 2 Label‟s, 1 WebBrowser, 1 ToolBar, 1 Switch e um LocationSensor. Então teremos
ToolBar1
Label1
Text –> Localização
Label2
Align –> alBotton
Text –> www.landersongomes.vivaitaocara.com.br
WebBrowser1
Align –> alTop
Align –> alClient
LocationSensor1
Distance –> 50
Ao final do processo acima nossa tela de design ficará semelhante à figura abaixo.
Ativando e desativando o sensor O objeto Switch1, não alteramos nenhuma de suas propriedades… mas será ele o nosso “interruptor” para ligar e desligar o Sensor de Localização LocationSensor1. Para o Switch1 vamos codificar seu evento OnSwitch, que seria o seu ativar/desativar propriamente dito, esse é o código: procedure TForm1.Switch1Switch(Sender: TObject); begin LocationSensor1.Active := Switch1.IsChecked; if LocationSensor1.Active = False then begin Label2.Text := 'landersongomes.vivaitaocara.com.br'; WebBrowser1.Navigate(Label2.Text); end; end;
Note que atribuímos ao Sensor de Localização (LocationSensor1) atividade ou não de acordo com a ativação ou não do Switch, assim sendo, ativado o Switch ativamos consequentemente o Sensor. Em seguida, apenas por estética, verificamos se o sensor está inativo, caso esteja, passamos o endereço do meu blog para a propriedade Text do Label2 e em seguida, passamos ela como URL para o WebBrowser1 Navegar. Então se o sensor estiver desativado, o WebBrowser1 abrirá meu blog.
Ajuda do GoogleMaps Já configuramos o comportamento da aplicação quando o sensor estiver desligado, agora vamos configurá-la para o funcionamento com o sensor ligado dando-lhe a funcionalidade de exibir nossa posição no Mapa. Antes de mais nada precisamos pegar uma linha com o GoogleMaps, será a linha que passaremos para nossa aplicação conseguir “desenhar” o mapa, e nossa aplicação por sua vez passará para o GoogleMaps a localização do ponto que queremos desenhar. É bem simples, veja a linha: https://maps.google.com/?q=%s,%s&&t=h&&z=13&&hl=pt-BR&&output=embed Basicamente, chamamos o GoogleMaps, informamos a ele a parte do mapa que queremos, representada na linha por: “?q=%s,%s”, cada um dos “%s” será trocado por sua respectiva coordenada a ser fornecida pelo sensor quando ativado. O restante são variáveis capazes de mudar o comportamento do mapa: &t=h –> indica o tipo do mapa, nesse caso híbrido.
&z=13 –> indica que nosso mapa será exibido com 13 de zoom. &output=embed –> quer dizer que nosso mapa estará embarcado no navegador, sem exibir recursos específicos de tela do GoogleMaps.
Atualizar a Localização e Exibir o Mapa Para exibirmos a localização, trataremos o evento OnLocationChanged, que é acionado sempre que sensor se movimenta superando o limite estabelecido em sua propriedade Distance, que em nosso caso setamos para 50 metros. Passaremos nesse evento a linha do Google citada na sessão anterior e receberemos as coordenadas por parte do LocationSensor1, veja como ficará o código a ser chamado no evento: procedure TForm1.LocationSensor1LocationChanged(Sender: TObject; const OldLocation, NewLocation: TLocationCoord2D); const Navegar : string = 'https://maps.google.com/?q=%s,%s&&t=h&&z=13&&hl=ptBR&&output=embed'; begin Label2.Text := Format(navegar, [ Format('%2.6f', [NewLocation.Latitude]), Format('%2.6f', [NewLocation.Longitude])]); WebBrowser1.Navigate(Format(navegar, [Format('%2.6f', [NewLocation.Latitude]), Format('%2.6f', [NewLocation.Longitude])])); end;
Com isso já temos o necessário para rodar a aplicação. Apenas explicando o conteúdo do código adicionado: Declaramos a constante Navegar do tipo string e atribuímos a ela a linha que pegamos “emprestada” do GoogleMaps. Em seguida usamos a função Format encadeadamente, uma vez passando valores do tipo Float, Latitude e Longitude do NewLocation passado no Evento sempre que a localização mudar. Utilizamos aí o formato de 2 casas inteiras e 6 casas decimais expressas pela string „%2.6f‟, assim forçamos as coordenadas a serem exibidas sob essa formatação. Exibimos esse resultado na propriedade Text do Label2, este conteúdo é a url a qual o Webbrowser1 logo em seguida recebe como parâmetro informando o destino da sua navegação. Executando a aplicação percebemos que a mesma já funciona, entretanto pode ocorrer de o mapa não estar representando sua real localização.
O ponto chave da localização Certamente, se você está no Brasil, perceberá que o separado de decimais e inteiros adotados no aqui é a vírgula(“,”), porém quando passamos as coordenadas com vírgula o GoogleMaps não consegue entender, uma vez que seus servidores estão em solo norte-americanos e lá o separador decimal é o ponto (“.”). Para resolvermos esse impasse basta setarmos o separador decimal dentro de nossa aplicação para ponto “.”, sendo assim vamos inserir imediatamente após o “begin” da codificação do eventoOnLocationChanged essa linha FormatSettings.DecimalSeparator := „.‟; . Com isso devemos salvar nossa aplicação e executá-la novamente para conferir o resultado.
A chave para que a aplicação realmente funcione no Brasil é termos o Separador de decimal alterado… simples assim, fazendo isso o exemplo postado pela Embarcadero em vídeo, ou o exemplo que acompanha o Delphi XE5 disponibilizado em sua “Welcome Page” funcionarão perfeitamente.
DELPHI XE5 ACESSANDO A CÂMERA E COMPARTILHANDO IMAGENS DO DISPOSITIVO ANDROID Acessar a câmera, a galeria de imagens do dispositivo Android e compartilhar através do Delphi XE5 com pouquíssimas linhas de código. Bem como mencionei na postagem anterior a ansiedade é grande para contê-la a melhor solução que encontrei foi colocar a mão na massa e codificar alguns exemplos. Para começar vamos fazer uma pequena aplicação mobile na qual iremos capturar e compartilhar imagens da câmera e da galeria do dispositivo. Nossa aplicação será toda escrita em códigos Delphi e rodará num dispositivo Android.
Iniciando o desenvolvimento Primeiro passo que tomaremos será iniciar o Delphi XE5 e criar nossa aplicação através do nenu File–> New Project –> Delphi Projects –> Mobile Projects. Vale notar que existem vários modelos de layout de aplicações prontos que podem ser selecionados, no nosso caso escolheremos um modelo de aplicação em branco (Blank Application).
Vamos salvar o projeto através da opção File –> Save All. Para a unit, atribua o nome de frmAndPrincipalUnt o projeto em si chamaremos de prjCamShare. Incluiremos em nosso projeto um TImage, um TToolBar, três TButton e um TActionList. Precisamos agora alterar algumas propriedades dos objetos em nosso projeto, começamos pelo formulário, seria o display do dispositivo exibido na IDE, altere sua propriedade Name para frmAndPrincipal. Os demais objetos vamos seguir a lista abaixo:
Button1
Name –> btnCam
StyleLookup –> cameratoolbutton
Button2
Name –> btnArquivo
StyleLookup –> searchtoolbutton
Button3
Name –> btnCompartilhar
StyleLookup –> actiontoolbutton
Image1
Name –> imgFoto
Align –> alClient
Atribuindo códigos e Ações Com a aplicação tendo o layout já definido fica faltando apenas inserir nossas linhas de código, porém juntamente com esse processo faremos atribiuções das ações pré-definidas que serão capazes de permitir nossa aplicação acessar as funcionalidades do dispositivo Android. Selecione o btnCam e no Object Inspector, clique sobre a propriedade Action, selecione então New Standard Action –> Media Library –> TTakePhotoFromCameraAction.
Ainda no Object Inspector, acesse a guia Events e expanda a propriedade Action , vide imagem abaixo:
a partir daí selecione o evento onDidFinishTaking e seu código ficará: procedure TfrmAndPrincipal.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap); begin imgFoto.Bitmap.Assign(Image); end;
Com esse código nossa aplicação já é capaz de capturar imagens da câmera do dispositivo. Mas como queremos algo mais, vamos continuar o trabalho. Para o botão btnArquivo, faremos o mesmo procedimento, entretanto usando New Standard Action –> Media Library –> TTakePhotoFromLibraryAction. Para este botão também utilizaremos o mesmo evento onDidFinishTaking e seu código para obtnArquivo será: procedure TfrmAndPrincipal.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap); begin imgFoto.Bitmap.Assign(Image); end;
E por fim vamos atribuir ao btnCompartilhar a New Standard Action –> Media Library –> TShowShareSheetAction e nesse caso codificaremos seu evento onBeforeExecute: procedure TfrmAndPrincipal.ShowShareSheetAction1BeforeExecute(Sender: TObject); begin ShowShareSheetAction1.Bitmap.Assign(imgFoto.Bitmap); end;
Compilar distribuir e usar Finalizado o nosso processo de codificação da aplicação vamos agora compilar e fazer o deploy de nossa aplicação. Selecione o dispositivo de destino para nossa aplicação, no meu caso escolhi um Motorola XT920, o Razr D3. Aqui temos que lembrar que o aparelho deve estar com o modo de Depuração USB ativo e aceitando fontes desconhecidas de aplicativos. Dê um Build no projeto e vamos madar Rodar sem depurar (Run without debugging). Aguarde que o próprio Delphi XE5 se encarregará de instalar o apk em seu dispositivo.
Agora é só conferir o resultado.
Até a próxima.
View more...
Comments