fbpx

Intents com Delphi XE5 comunicando Apps através do Android

Executando o Apk Intents

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ção implementation vamos incluir:

uses 
 IdURI, FMX.Helpers.Android, Androidapi.Jni.GraphicsContentViewText, Androidapi.Jni.Net, Androidapi.Jni.JavaTypes;

Ao final desta etapa teremos nossa aplicação visualmente parecendo-se com a imagem abaixo:

Tela do Aplicativos de Intents com Delphi XE5

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 :='https://landersongomes.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.

Executando o Apk Intents

Explicando os pares: Ação / Uri

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) Geo abre 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  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.

Até a próxima.

,

Comente