Upload
emarquesc
View
2.280
Download
2
Embed Size (px)
Citation preview
5/27/2018 timas Dicas Mobile Delphi XE5
1/25
OBTER O IMEI DE DISPOSITIVO ANDROIDCOM DELPHI XE5
Quando se fala de Mobilidade garantir que informaes corporativas sejam
visualizadas apenas por pessoal autorizado essencial. Nessa postagem vamos
implementar a autenticao de uma aplicao Delphi XE5 Androidatravs doIMEIdodispositivo.
IMEI a identificao do dispositivo
IMEI o acrnimo de Mobile Equipment Identity(Identificao Internacional de Equipamento
Mvel). Trata-se de uma sequncia de nmeros e caracteres especiais nica para cada
dispositivo. A ideia bem parecida com oMAC addressdas placas de rede. Isso facilita na hora de
localizar um aparelho especfico em meio s centenas de dispositivos colocados no mercado todosos meses.
Criando a aplicao Mobile Delphi XE5Crie um novo projeto Mobile no Delphi XE5. No fonte do form da aplicao vamos adicionar as
seguintes referncias na clausula uses:
usesFMX.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 IMEIe a
propriedade Namepara btnCapturarIMEI.
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/03/IMEI_LOCK.png5/27/2018 timas Dicas Mobile Delphi XE5
2/25
Vamos codificar seu evento onClickcomo abaixo:
procedureTForm1.btnCapturarIMEIClick(Sender: TObject);var
obj: JObject;tm: JTelephonyManager;IMEI: String;
beginobj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);ifobj nilthen
begintm := TJTelephonyManager.Wrap( (obj asILocalObject).GetObjectID );iftm nilthen
IMEI := JStringToString(tm.getDeviceId);end;ifIMEI = ''then
IMEI :=JStringToString(TJSettings_Secure.JavaClass.getString(SharedActivity.getContentResolver,TJSettings_Secure.JavaClass.ANDROID_ID));
ShowMessage('IMEI :'+ #13+ IMEI);
end;
Fcil extremamente fcil
Execute a aplicao e clicando sobre o boto o IMEI do seu dispositivo ser exibido.
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/03/Interface_apk.png5/27/2018 timas Dicas Mobile Delphi XE5
3/25
Vimos como fcil capturar o IMEI atravs de uma aplicao 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 aplicao.
isso simples assim!
At a prxima!
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/03/IMEI_Delphi_XE5.png5/27/2018 timas Dicas Mobile Delphi XE5
4/25
CONTROLE DE GESTOS NO ANDROID COMDELPHI XE5Com a popularizao dos smartfones e consolidao das telas touch screen ter em sua aplicao
funes acionadas pelo comportamento de deslizar o dedo sobre a tela pode representar um
grande diferencial de sua aplicao.Nessa postagem vamos criar uma aplicao AndroidcomDelphi XE5que ser capaz de captar os gestos do
usurio na tela do dispositivo.
Criando a aplicao e adicionando os componentes
Vamos iniciar uma nova aplicao Mobil e em Br anco no Delphi XE5, como j fizemos este procedimento em
vrias postagens anteriores vamos pular essa parte, e nesta aplicao vamos inserir os componentes: 1 ToolBar,
1 Label(i nsira dentro da ToolBar), 1 TabControl, e 1Panel.
Uma vez adicionados os componentes em nossa aplicao, 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 boto direito do mouse sobre oTabControl1e adicionar3 novos TabI tem, aps
adicionados vamos alterar a propriedade Text de cada um deles:
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/02/Interface-da-Aplica%C3%A7%C3%A3o-Gestos.png5/27/2018 timas Dicas Mobile Delphi XE5
5/25
TabItem1.Text> Esquerda
TabItem2.Text> Central
TabItem3.Text> Direita
GestureManager a gesto dos gestos
Para que os gestos sejam interpretados por nossa aplicao precisamos adicionar ainda um GestureManager.
Selecione o Panel1e vamos associar sua propriedade Touch.Gestur eManagere habilitar suasGestures
Standard: Left, Right, Downe Up. Veja na imagem abaixo:
Codificando a captao do Gestos
Apenas para garantir que nossa aplicao sempre seja inicializada com aTabI temCentralativa em
nosso TabControlvamos inserir o seguinte cdigo no evento onActivate do Form1:
procedureTForm1.FormActivate(Sender: TObject);beginTabControl1.TabIndex := 1;end;
E para os gestos serem interpretados pela aplicao vamos inserir no evento onGesture do Painel1o cdigo:
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/02/Associando-GestureManager-ao-Panel.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/02/Adicionando-TabItens.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/02/Associando-GestureManager-ao-Panel.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/02/Adicionando-TabItens.png5/27/2018 timas Dicas Mobile Delphi XE5
6/25
procedureTForm1.Panel1Gesture(Sender: TObject;
constEventInfo: TGestureEventInfo; varHandled: Boolean);var
Gesto : string;begin
ifGestureToIdent(EventInfo.GestureID, Gesto) thenbegin
caseEventInfo.GestureID ofsgiLeft : TabControl1.TabIndex := 0;
sgiRight: TabControl1.TabIndex := 2;sgiDown : TabControl1.TabIndex := 1;sgiUp : ShowMessage('Voc utilizou o gesto para cima: '+ Gesto);
end;end;
end;
Aps a todos os componentes configurados e os cdigos acima inseridos essa ser a aparncia do projeto
Executar e entender o funcionamento da aplicao
Agora basta executar a aplicao no emulador ou diretamente no seu dispositivo Android e conferir o
resultado. Basicamente trocamos asTabItenscom 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
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/02/Interface-Final-da-Aplica%C3%A7%C3%A3o-Gestos.png5/27/2018 timas Dicas Mobile Delphi XE5
7/25
Agora adaptar o modelo sua necessidade e mandar ver!
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2014/02/Aplica%C3%A7%C3%A3o-Executando-Gestos.png5/27/2018 timas Dicas Mobile Delphi XE5
8/25
INTENTS COM DELPHI XE5 COMUNICANDOAPPS ATRAVS DO ANDROIDTanto em desktop quanto mobile, no desenvolvimento por diversas vezes temos a necessidade de
nossa aplicao interagir com outras aplicaes da plataforma alvo de nosso desenvolvimento.
Aquele relatrio que precisa ser exportado e visualizado em Excelna plataforma Desktop um exemplo que
quase todo desenvolvedor j teve implementar.
Intent, aqui bate o corao
Quando falamos de mobile, em Androidsendo mais especfico, poder interagir com os recursos do sistema por
si s, j pode dar ao usurio de nossa aplicao um ganho significativo de experincia de uso. J citamos aqui
alguns casos de como fazer nossa aplicao interagir com o Android, porm na postagem de hoje traremos a
tona a classe que tida como o corao do sistema Android: a Classe Intent.
A classe Intent(android.content.Intent) est presente em todos os lugares e representa uma mensagem da
aplicao para o sistema operacional solicitando a este que realize algo. Atravs dela possvel integrar
diferentes aplicaes 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 aplicao at mesmo
efetuar uma chamada telefnica.
Delphi: criando a interface da aplicao.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> Intentsno Delphi
TextAling = taCenter
ComboBox1
Itens
Mapa Telefone
Navegador
Contatos
Button1
Text> Executar
Em nosso projeto iremos utilizar alguns namespaces para utilizarmos funes do Android, para isso na clausula
Uses da seoimplementationvamos incluir:
Ao final desta etapa teremos nossa aplicao visualmente parecendo-se com a imagem abaixo:
usesIdURI, FMX.Helpers.Android, Androidapi.Jni.GraphicsContentViewText, Androidapi.Jni.Net,
Androidapi.Jni.JavaTypes;
5/27/2018 timas Dicas Mobile Delphi XE5
9/25
E como usar as Intents na prtica? E no Delphi como seria isso?
Nossa aplicao enviar chamadas ao sistema operacional invocando os aplicativos do Google atravs de pares
Ao / URI que definem qual aplicativo est sendo chamado e seu comportamento ao receber a inteno dechamada.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.
Ento vamos fazer as coisas acontecerem por aqui!
No evento OnClick do nosso Button1 vamos inserir umas variveis:
varuri : string;Intent : JIntent;idContato : Integer;
Basicamente ao clicar no boto o usurio 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
aplicao do Google que desejamos executar. Veja o cdigo (que deve vir imediatamente aps a declarao das
varieis acima):
begincaseComboBox1.ItemIndex of-1:
beginShowMessage('Selecione uma Intent');ComboBox1.SetFocus;
end;0: //Mapabegin
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); exceptonE: Exception doShowMessage(E.Message); end;
end;1: // Telefone
http://developer.android.com/guide/appendix/g-app-intents.htmlhttp://developer.android.com/guide/appendix/g-app-intents.htmlhttp://developer.android.com/guide/appendix/g-app-intents.htmlhttp://developer.android.com/guide/appendix/g-app-intents.htmlhttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/12/intents_tela.pnghttp://developer.android.com/guide/appendix/g-app-intents.htmlhttp://developer.android.com/guide/appendix/g-app-intents.htmlhttp://developer.android.com/guide/appendix/g-app-intents.html5/27/2018 timas Dicas Mobile Delphi XE5
10/25
beginuri :='tel://98390170';try
Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_CALL,TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(uri))));
SharedActivity.startActivity(Intent); exceptonE: 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);
exceptonE: Exception doShowMessage(E.Message);
end;end;
3: // Navegadorbegin
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); exceptonE: Exception do
ShowMessage(E.Message); end;
end;end;// case
end;
Agora basta executar o programa no dispositivo ou no emulador que j temos nossa aplicao interagindo com
as aplicaes do Google que acompanham os dispositivos Android.
Explicando os pares: Ao / Uri
Como dito acima, os aplicativos do tm sua chamada e comportamentos estabelecidos atravs dos pares Ao/
Uri, abaixo vamos descrever cada um dos pares utilizados por ns em cada Intent de nossa aplicao:
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/12/Intent_Executanto_APK.png5/27/2018 timas Dicas Mobile Delphi XE5
11/25
AIntent Action(Ao) View combinada com a Intent URI(Uri) Geoabre o Google Maps do dispositivo
passando a ele as coordenadas ou endereo contidos no restante da URI. Este par foi utilizado ento por nossa
aplicao quando clicamos no Button1 e o ComboBox teve a opo Mapa selecionada.
Fica bem claro quando separamos o cdigo que inicializa nossa varivel 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 aURIa Telacrescida de um nmero de telefone, com isso nossa aplicao
efetuar a chamada telefnica para o nmero informado.
Enfim, tudo fica bem mais claro aps o entendimento do primeiro caso.
D sua aplicao a inteno de interagir com o Android.
Agora, vale a pena dar uma olhada na Lista de Intents para invocar aplicativos do Google e adaptar sua
aplicao para essas possveis interaes com o Android.
Lista completa de Intents: http://developer.android.com/guide/components/intents-common.html
At a prxima.
5/27/2018 timas Dicas Mobile Delphi XE5
12/25
DELPHI XE5 ENVIANDO SMS DIRETO DE SUAAPLICAO ANDROIDNessa postagem vamos enviar SMS atravs de uma aplicao Delphi XE5 para Android. Poucas
linhas de cdigos que podem ser adaptadas realidade de sua aplicao mobile e torn-la ainda
mais agradvel a seus usurios.
Criao da Interface da aplicao e Conceder Permisso para Envio de SMS
Inicie o Delphi XE5e crie um novo projeto Mobile em Branco como j fizemos em outras postagens,
acesse Menu File > New > FireMonkey Mobile Applicatione em seguida selecione a opoBlank
Template.
Vamos inserir em nosso formulrio1 Label, 1 Edit, 1 Memo e 1 Button. Alteraremos a propriedade Textdo
Label para Destinatrio. Ao final teremos a interface da aplicao assemelhando-se figura abaixo:
Como vamos enviar SMS, precisamos solicitar essa permisso ao Android. Abre-se aqui um parntese, quando
voc instala uma aplicao no Android ele sempre informa os recursos que essa aplicao vai usar, por issovamos setar a permisso para Envio de SMS como verdadeira. No Project Managerselecione o nosso Projeto
e clique com o boto direito para que seja exibido oPopup Menue nele selecioneOptions(a penltima opo
do menu popup).
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/11/Options.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/11/Interface_SMS.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/11/Options.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/11/Interface_SMS.jpg5/27/2018 timas Dicas Mobile Delphi XE5
13/25
As opes do Projeto sero abertas e a procuraremos por Uses Permissions, note que no quadro direita esto
todas as opes de permisses possveis a um projeto Android. Vamos procurar nas permisses por Send
SMSe set-la para True, ou seja, acabamos de dizer para o Android que usaremos o envio de SMS.
Feito isso basta clicar em OKe vamos iniciar a codificao de nosso projeto.
Cdigo Delphi funcionalidade Android
Na seo Implementation, em sua clusula uses vamos adicionar 2 Namespaces que fazem referncias a
Classes Android e faro com que nosso projeto se comunique com o telefone e reconhea os tipos de dados do
Android/Java, so eles respectivamente abaixo:
implementation {$R *.fmx}uses Androidapi.Jni.Telephony, Androidapi.Jni.JavaTypes;
No evento OnClickdo Button vamos inserir o seguinte cdigo:
procedureTForm1.btnEnviarClick(Sender: TObject);var
GerenciadorSMS : JSmsManager;begin
GerenciadorSMS := TJSmsManager.JavaClass.getDefault;ifnotEdit1.Text.IsEmpty thenbegin
ifnotMemo1.Lines.Text.IsEmpty thenGerenciadorSMS.sendTextMessage(StringToJString(Edit1.Text), nil,
StringToJString(Memo1.Lines.Text), nil, nil)else
ShowMessage('Escreva a mensagem.');end
elseShowMessage('Informe o nmero de destino para a mensagem.');
end;
J est pronta nossa aplicao. Acione o Emulador ou conecte um dispositivo Android e execute para conferir o
funcionamento.
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/11/Permissoes_SendSMS.jpg5/27/2018 timas Dicas Mobile Delphi XE5
14/25
Traga para sua realidade
Na minha postagemDelphi XE5 Efetuando chamadas telefnicas direto de sua aplicao mvel,populamos
um ListBox com elementos de um cadastro de fornecedores fictcio e a partir dali efetuvamos chamadas
telefnicas. Na postagem de hoje, poderamos 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 disponvel, adapte-a realidade de seu usurio.
At a prxima.
http://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-efetuando-chamadas-telefonicas-direto-de-sua-aplicacao-movel/http://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-efetuando-chamadas-telefonicas-direto-de-sua-aplicacao-movel/http://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-enviando-sms-direto-de-sua-aplicacao-android/attachment/sms_recebidohttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-enviando-sms-direto-de-sua-aplicacao-android/attachment/sms_enviadohttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-enviando-sms-direto-de-sua-aplicacao-android/attachment/sms_recebidohttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-enviando-sms-direto-de-sua-aplicacao-android/attachment/sms_enviadohttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-efetuando-chamadas-telefonicas-direto-de-sua-aplicacao-movel/5/27/2018 timas Dicas Mobile Delphi XE5
15/25
DELPHI XE5 EFETUANDO CHAMADASTELEFNICAS DIRETO DE SUA APLICAOMVEL
Sua aplicao Mobile DelphiXE5 efetuando chamada telefnica sem necessidade de consultar aagenda ou outro aplicativo. De a seus usurios tima experincia.
Imagine que voc tem uma aplicao mvel que carrega a lista de fornecedores de seu cliente, nessa lista h
informaes como Nome, Telefone, e-mail, etc. Voc pega a informao de telefone e gostaria de us-la para
efetuar uma ligao para esse fornecedor. Voc memoriza esse telefone e no aplicativo de discagem do seu
smartphone digita esse nmero para efetuar a chamada. Por que no fazer isso direto de seu aplicativo? O
nmero do fornecedor j est armazenado l Vamos aoDelphi XE 5ento?!
Criando a UI (User InterfaceInterface do Usurio)
Abra o Delphi XE5e crie Novo Projeto Mvel atravs do menu File> New Project > Delphi Projects >
Mobile Projects. Utilizaremos novamente o modelo de aplicao em branco (Blank Application).
Vamos salvar nosso projeto atravs do Menu File > Save All (SHIFT +CTRL + S), crie uma pasta
denominada prjDiscadorpara salvarmos nossos arquivos dentro dela. Chamaremos a Unit do formulrio
defrmDiscadorUnte o projeto chamaremos Discador.
Insira no formulrio um Listbox, renomeie-o para lbxFornecedores, clique com o boto direito sobre ele e
selecione a opoAdd Item.
Vamos adiconar 1 TListBoxHeadere 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
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/11/Add_Listbox.jpg5/27/2018 timas Dicas Mobile Delphi XE5
16/25
ItemData.Detail>
StyleLookup> listboxitembottomdetail
Altere a propriedade Align do lbxFornecedorespara alClient, assim ele passar a ocupar toda a tela do
aplicativo. Quando alteramos as propriedadesStyleLookupdos ListBoxItens listboxitembottomdetailfizemos
com que a informao do campo Detailpasse a ser exibida abaixo do texto principal do item.
Agora que j temos os dados de nossos fornecedores vamos codificar nossa aplicao dando a ela a
funcionalidade proposta na postagem.
Funcionamento e Codificao da aplicao
Basicamente a aplicao efetuar a discagem para o item selecionado no lbxFornecedoresvamos fazer alguns
ajustes no cdigo. Pressione F12para visualizarmos a Unit e nela vamos inserir na clusula uses da seo
Interfacevamos adicionar os seguintes Namespaces:
//Namespaces adicionadosFMX.PhoneDialer, FMX.Platform;
Vamos ainda acrescentar definio de nosso Formulrio (frmDiscador) uma varivel Discadorem sua
seo privatecomo segue:
private{ Private declarations }Discador : IFMXPhoneDialerService;
Assim j temos tudo pronto para inserir o cdigo que efetuar a chamada telefnica propriamente dita, para isso
codificaremos o evento OnItemClickdo lbxFornecedorescomo abaixo:
procedureTfrmDiscador.ListBox1ItemClick( constSender: TCustomListBox;constItem: TListBoxItem);
beginifnotItem.ItemData.Detail.IsEmpty thenbegin
TPlatformServices.Current.SupportsPlatformService(IFMXPhoneDialerService,IInterface(Discador));
ifAssigned(Discador) thenbegin
Discador.Call(Item.ItemData.Detail); end;end
elsebegin
Discador.Call(InputBox('Fornecedor sem nmero.', 'Informe o nmero a ser discado',''));
end;end;
voilExecute a aplicao e ver que j temos a chamadas telefnicas acontecendo ao clicar sobre os itens da nossa
lista de fornecedores.
5/27/2018 timas Dicas Mobile Delphi XE5
17/25
Faz-se notar que nosso ltimo fornecedor no tem informado seu nmero de telefone, quando o
campo Detaildo item estiver vazio, ser exibida uma InputBoxsolicitando o nmero a ser discado.
A simplicidade de implementar essa funcionalidade em sua aplicao pode fazer a diferena no cotidiano de seu
usurio/cliente, pense nisso.
At a prxima e bons cdigos!
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/11/InputBox_Discar.pnghttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-efetuando-chamadas-telefonicas-direto-de-sua-aplicacao-movel/attachment/discandohttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-efetuando-chamadas-telefonicas-direto-de-sua-aplicacao-movel/attachment/selecionando_chiphttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/11/InputBox_Discar.pnghttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-efetuando-chamadas-telefonicas-direto-de-sua-aplicacao-movel/attachment/discandohttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-efetuando-chamadas-telefonicas-direto-de-sua-aplicacao-movel/attachment/selecionando_chiphttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/11/InputBox_Discar.pnghttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-efetuando-chamadas-telefonicas-direto-de-sua-aplicacao-movel/attachment/discandohttp://vivaitaocara.com.br/landersongomes/delphi/delphi-xe5-efetuando-chamadas-telefonicas-direto-de-sua-aplicacao-movel/attachment/selecionando_chip5/27/2018 timas Dicas Mobile Delphi XE5
18/25
SENSOR DE LOCALIZAO DE DISPOSITIVOSMVEIS COM DELPHI XE5Nesta postagem acessaremos o Sensor de Localizao de dispositivos mveis atravs de uma
aplicao desenvolvida com Delphi XE5.
Neste tutorial daremos prosseguimento a nossa srie de desenvolvimento de aplicaes de exemplos utilizando
Delphi XE5 para acessar funcionalidades de dispositivos mveis com poucas linhas de cdigo. Nele faremos
acesso ao sensor de localizao do dispositivo fazendo com que a sua localizao seja plotada no mapas atravs
de integrao com oGoogle Maps.
Iniciando o Delphi e preparando a aplicao
Iniciaremos o Delphi XE5 e criaremos um Novo Projeto Mvel atravs do menu File> New Project >
Delphi Projects> Mobile Projects. Adotaremos o modelo de aplicao em branco (Blank Application).
Feito isso salvaremos nosso projeto atravs do menu File > Save All. Chamaremos a Unit
de frmLocalizacaoUnte o projeto chamaremos de prjLocalizeMe.
Agora vamos inserir em nossa aplicao os componentes que faro com que ela fique funcional. Vamos
adicionar 2 Labels, 1 WebBrowser, 1 ToolBar, 1 Switch e um LocationSensor. Entoteremos
ToolBar1
Align> alTop
Label1
Text> Localizao
Label2
Align> alBotton
Text> www.landersongomes.vivaitaocara.com.br
WebBrowser1
Align> alClient
LocationSensor1 Distance> 50
Ao final do processo acima nossa tela de design ficar semelhante figura abaixo.
https://www.google.com/maps/previewhttps://www.google.com/maps/previewhttps://www.google.com/maps/previewhttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/NovoProjetoAndroid.jpghttps://www.google.com/maps/preview5/27/2018 timas Dicas Mobile Delphi XE5
19/25
Ativando e desativando o sensor
O objeto Switch1, no alteramos nenhuma de suas propriedades mas ser ele o nosso interruptor para ligar
e desligar o Sensor de Localizao LocationSensor1. Para o Switch1 vamos codificar seu evento OnSwitch,
que seria o seu ativar/desativar propriamente dito, esse o cdigo:
procedureTForm1.Switch1Switch(Sender: TObject);beginLocationSensor1.Active := Switch1.IsChecked;ifLocationSensor1.Active = Falsethenbegin
Label2.Text := 'landersongomes.vivaitaocara.com.br';WebBrowser1.Navigate(Label2.Text);
end;end;
Note que atribumos ao Sensor de Localizao (LocationSensor1) atividade ou no de acordo com a ativao ou
no do Switch, assim sendo, ativado o Switch ativamos consequentemente o Sensor. Em seguida, apenas por
esttica, verificamos se o sensor est inativo, caso esteja, passamos o endereo do meu blog para a propriedade
Text do Label2 e em seguida, passamos ela como URL para o WebBrowser1 Navegar. Ento se o sensor estiver
desativado, o WebBrowser1 abrir meu blog.
Ajuda do GoogleMaps
J configuramos o comportamento da aplicao quando o sensor estiver desligado, agora vamos configur-la
para o funcionamento com o sensor ligado dando-lhe a funcionalidade de exibir nossa posio no Mapa.
Antes de mais nada precisamos pegar uma linha com o GoogleMaps, ser a linha que passaremos para nossa
aplicao conseguir desenhar o mapa, e nossa aplicao por sua vez passar para o GoogleMaps a
localizao 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 so variveis capazes de mudar o comportamento do mapa:
&t=h> indica o tipo do mapa, nesse caso hbrido.
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/10/Design-App-LocalizeMe.jpg5/27/2018 timas Dicas Mobile Delphi XE5
20/25
&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 especficos
de tela do GoogleMaps.
Atualizar a Localizao e Exibir o Mapa
Para exibirmos a localizao, 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 sesso anterior e receberemos as coordenadas por
parte do LocationSensor1, veja como ficar o cdigo a ser chamado no evento:
procedureTForm1.LocationSensor1LocationChanged(Sender: TObject; constOldLocation,NewLocation: TLocationCoord2D);constNavegar : string= 'https://maps.google.com/?q=%s,%s&&t=h&&z=13&&hl=pt-
BR&&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 necessrio para rodar a aplicao. Apenas explicando o contedo do cdigo adicionado:
Declaramos a constante Navegar do tipo string e atribumos a ela a linha que pegamos emprestada do
GoogleMaps. Em seguida usamos a funo Format encadeadamente, uma vez passando valores do tipo Float,
Latitude e Longitude do NewLocation passado no Evento sempre que a localizao mudar. Utilizamos a o
formato de 2 casas inteiras e 6 casas decimais expressaspela string %2.6f, assim foramos as coordenadas a
serem exibidas sob essa formatao.
Exibimos esse resultado na propriedade Text do Label2, este contedo a url a qual o Webbrowser1 logo em
seguida recebe como parmetro informando o destino da sua navegao.
Executando a aplicao percebemos que a mesma j funciona, entretanto pode ocorrer de o mapa no estar
representando sua real localizao.
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/10/Screenshot_2013-10-06-19-38-29.png5/27/2018 timas Dicas Mobile Delphi XE5
21/25
O ponto chave da localizao
Certamente, se voc est no Brasil, perceber que o separado de decimais e inteiros adotados no aqui a
vrgula(,), porm quando passamos as coordenadas com vrgula o GoogleMaps no consegue entender, uma
vez que seus servidores esto em solo norte-americanos e l o separador decimal o ponto (.).
Para resolvermos esse impasse basta setarmos o separador decimal dentro de nossa aplicao para ponto .,
sendo assim vamos inserir imediatamente aps obeginda codificao do eventoOnLocationChanged essa
linha FormatSettings.DecimalSeparator := .;.
Com isso devemos salvar nossa aplicao e execut-la novamente para conferir o resultado.
A chave para que a aplicao realmente funcione no Brasil termos o Separador de decimal alterado simples
assim, fazendo isso o exemplo postado pelaEmbarcadero em vdeo, ou o exemplo que acompanha o Delphi
XE5 disponibilizado em sua Welcome Page funcionaro perfeitamente.
http://www.youtube.com/embed/b4lgDXx5jAE?rel=0&wmode=transparenthttp://www.youtube.com/embed/b4lgDXx5jAE?rel=0&wmode=transparenthttp://www.youtube.com/embed/b4lgDXx5jAE?rel=0&wmode=transparenthttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/10/Screenshot_2013-10-06-19-26-59.pnghttp://www.youtube.com/embed/b4lgDXx5jAE?rel=0&wmode=transparent5/27/2018 timas Dicas Mobile Delphi XE5
22/25
DELPHI XE5 ACESSANDO A CMERA ECOMPARTILHANDO IMAGENS DODISPOSITIVO ANDROID
Acessar a cmera, a galeria de imagens do dispositivo Android e compartilhar atravs do DelphiXE5 com pouqussimas linhas de cdigo.
Bem como mencionei na postagem anterior a ansiedade grande para cont-la a melhor soluo que encontrei
foi colocar a mo na massa e codificar alguns exemplos. Para comear vamos fazer uma pequena aplicao
mobile na qual iremos capturar e compartilhar imagens da cmera e da galeria do dispositivo. Nossa aplicao
ser toda escrita em cdigos Delphie rodar num dispositivo Android.
Iniciando o desenvolvimentoPrimeiro passo que tomaremos ser iniciar o Delphi XE5 e criar nossa aplicao atravs do nenu File> New
Project > Delphi Projects > Mobile Projects.
Vale notar que existem vrios modelos de layout de aplicaes prontos que podem ser selecionados, no nosso
caso escolheremos um modelo de aplicao em branco (Blank Application).
Vamos salvar o projeto atravs da opo File > Save All. Para a unit, atribua o nome
de frmAndPrincipalUnto projeto em si chamaremos de prjCamShare.
Incluiremos em nosso projeto um TImage, um TToolBar, trs TButton e um TActionList. Precisamos agoraalterar algumas propriedades dos objetos em nosso projeto, comeamos pelo formulrio, 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
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/NovoProjetoAndroid.jpg5/27/2018 timas Dicas Mobile Delphi XE5
23/25
StyleLookup>actiontoolbutton
Image1
Name>imgFoto
Align> alClient
Atribuindo cdigos e Aes
Com a aplicao tendo o layout j definido fica faltando apenas inserir nossas linhas de cdigo, porm
juntamente com esse processo faremos atribiues das aes pr-definidas que sero capazes de permitir nossa
aplicao acessar as funcionalidades do dispositivo Android.
Selecione o btnCame noObject Inspector, clique sobre a propriedade Action, selecione ento New Standard
Action> Media Library> TTakePhotoFromCameraAction.
Ainda no Object Inspector, acesse a guia Eventse expanda a propriedadeAction, vide imagem abaixo:
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/ExpandAcao.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/StandardActions.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/LayoutCamShare.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/ExpandAcao.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/StandardActions.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/LayoutCamShare.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/ExpandAcao.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/StandardActions.jpghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/LayoutCamShare.jpg5/27/2018 timas Dicas Mobile Delphi XE5
24/25
a partir da selecione o evento onDidFinishTakinge seu cdigo ficar:
procedureTfrmAndPrincipal.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);begin
imgFoto.Bitmap.Assign(Image); end;
Com esse cdigo nossa aplicao j capaz de capturar imagens da cmera do dispositivo. Mas como queremos
algo mais, vamos continuar o trabalho.
Para o boto btnArquivo, faremos o mesmo procedimento, entretanto usando New Standard Action> Media
Library > TTakePhotoFromLibraryAction. Para este boto tambm utilizaremos o mesmo
evento onDidFinishTakinge seu cdigo para obtnArquivoser:
procedureTfrmAndPrincipal.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap);begin
imgFoto.Bitmap.Assign(Image); end;
E por fim vamos atribuir ao btnCompartilhara New Standard Action > Media Library >
TShowShareSheetActione nesse caso codificaremos seu evento onBeforeExecute:
procedureTfrmAndPrincipal.ShowShareSheetAction1BeforeExecute(Sender: TObject);begin
ShowShareSheetAction1.Bitmap.Assign(imgFoto.Bitmap); end;
Compilar distribuir e usarFinalizado o nosso processo de codificao da aplicao vamos agora compilar e fazer o deploy de nossa
aplicao. Selecione o dispositivo de destino para nossa aplicao, no meu caso escolhi um Motorola XT920, o
Razr D3.
Aqui temos que lembrar que o aparelho deve estar com o modo de Depurao 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
prprio Delphi XE5se encarregar de instalar oapkem seu dispositivo.
5/27/2018 timas Dicas Mobile Delphi XE5
25/25
Agora s conferir o resultado.
At a prxima.
http://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-09-25.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-07-13.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-08-45.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-06-38.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-00-05.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-09-25.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-07-13.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-08-45.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-06-38.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-00-05.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-09-25.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-07-13.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-08-45.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-06-38.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-00-05.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-09-25.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-07-13.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-08-45.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-06-38.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-00-05.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-09-25.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-07-13.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-08-45.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-06-38.pnghttp://vivaitaocara.com.br/landersongomes/wp-content/uploads/2013/09/Screenshot_2013-09-12-15-00-05.png