Ótimas Dicas Mobile Delphi XE5

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.png
  • 5/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.png
  • 5/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.png
  • 5/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.png
  • 5/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.png
  • 5/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.png
  • 5/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.png
  • 5/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.html
  • 5/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.png
  • 5/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.jpg
  • 5/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.jpg
  • 5/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.jpg
  • 5/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_chip
  • 5/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/preview
  • 5/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.jpg
  • 5/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.png
  • 5/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=transparent
  • 5/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.jpg
  • 5/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.jpg
  • 5/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