Você está na página 1de 14

Delphi, Tutorial

Integrando Aplicativo Delphi XE7 Android com Whatsapp


novembro 6, 2014 Landerson Gomes 36 Comentários

Não resta dúvidas que o aplicativo de mensagens instantâneas Whatsapp abocanhou


grande para da comunicação por dispositivos móveis, nesta postagem veremos como
acioná-lo direto de uma aplicação Delphi XE7.
Como referencia vamos utilizar o FAQ do Whatsapp, lá há a explicação de como fazer através do Android em Java, o trabalho nosso aqui
fica apenas na “conversão” para Delphi. Vamos ao projeto, vamos ao Delphi XE7.

Delphi como sempre fizemos

No Delphi XE7 inicie um novo projeto Multi-Device Project (Como já fizemos este procedimento por diversas vezes aqui no blog, vou
considerar que podemos pular essa parte). Vamos selecionar a Target Platform Android através do Project Manager, aproveite e
selecione também o Dispositivo Alvo (opção Target) para onde será feito o deploy após a compilação. Veja na imagem abaixo:

Construindo a tela do aplicativo

Vamos construir uma interface bem simples, nela teremos apenas os componentes e propriedades como listados abaixo:

Edit1
o Align –> Top
o Text –> ”
o ReturnKeyType –> Done
Image1
o MultiResBitmap –> [Uma imagem de sua preferência]
o WrapMode –> Stretch
Button1
o Text –> ‘Enviar Whatsapp’

Como mencionei algo bem simples, apenas para fins didáticos.

Entendendo e codificando

Basicamente teremos no Edit1 um texto que será entregue ao Whatsapp para que ao selecionarmos o contato nele a mensagem seja enviada.
Agora que já temos o conceito vamos codificar.

Vale lembrar que devemos mais uma vez fazer uso dos Namespaces ou Units para utilização dos recursos do Android no Delphi, para tal
na seção implementation insira os:

1implementation

3{$R *.fmx}

4uses

5 FMX.Helpers.Android, Androidapi.Jni.GraphicsContentViewText,

6 Androidapi.Jni.Net, Androidapi.Jni.JavaTypes, idUri, Androidapi.Jni,

Androidapi.JNIBridge, Androidapi.Helpers;
7

Feito isso, no OnClick do Button1 vamos inserir o código abaixo:

procedure TForm1.Button1Click(Sender: TObject);


1
var
2
IntentWhats : JIntent;
3
mensagem : string;
4
begin
5
if Edit1.Text.IsEmpty then
6 mensagem := 'Teste de envio do Whatsapp com Delphi XE7. '+ #13 +

7 'Confira mais no blog www.vivaitaocara.com.br/landersongomes/'

else
8
mensagem := Edit1.Text;
9

10

11
IntentWhats := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SEND);
12
IntentWhats.setType(StringToJString('text/plain'));
13
IntentWhats.putExtra(TJIntent.JavaClass.EXTRA_TEXT,
14
StringToJString(mensagem));
15 IntentWhats.setPackage(StringToJString('com.whatsapp'));

16 SharedActivity.startActivity(IntentWhats);

17

18end;

19

20

Confira o resultado

Bem basta compilar e testar, confira nas imagens abaixo que funcionou perfeitamente. Parte que ainda não obtive sucesso foi selecionar o
contato previamente, porém continuarei tentando e conseguindo subo uma atualização.
Como pode ver o mecanismo utilizado para efetuar a comunicação do nosso aplicativo com o Whatsapp é o que já citamos aqui no blog
inúmeras vezes: Intents, vale a pena ficar por dentro desse tema, que inclusive foi o tema de minha palestra na Embarcadero Conference
2014.

Até a próxima!

Relacionado

Checar se pacote está instalado no Android com Delphi XE7

Em "Delphi"
Como alterar o nome do pacote de sua aplicação Delphi XE7 Android

Em "Delphi"

Delphi XE7 Android e Dialogs, o que mudou?

Em "Delphi"

AndroidDelphi XE7desenvolvimentodestaqueTutorial

Navegação do post
Post anteriorComo alterar o nome do pacote de sua aplicação Delphi XE7 AndroidPróximo postIntegrando Aplicação Delphi XE7 Android com o Twitter

36 opiniões sobre “Integrando Aplicativo Delphi XE7 Android com Whatsapp”

1. Thiago

novembro 6, 2014 às 17:45

Olá, Quando meu app é executado em um dispositivo com tamanho de tela diferente os componentes ficam fora do lugar original,
quero saber como fazer para os componentes ficar ajustado independente do tamanho da tela.

Responder

2. Jailson

novembro 13, 2014 às 15:10


Boa tarde! O meu projeto esta pedindo FMX.Helpers.Android.dcu

Responder

1. Landerson Gomes

novembro 14, 2014 às 18:31

Qual a versão do Delphi vocês está utilizando Jailson?

Responder

3. Jailson

novembro 13, 2014 às 15:19

Boa tarde Landerson! Existe a possibilidade de mandar as mensagens em lote? Ex: mandar uma mensagem para todos os meus
contatos.

Responder

1. Landerson Gomes

novembro 14, 2014 às 18:29

Olá Jailson! Bem vindo ao Blog! Existir até que existe essa possibilidade sim, entretanto como não temos aí via programação
a possibilidade de informar o destinatário da mensagem fica inviável, pelo menos por enquanto, afinal ainda não consegui
encontrar a solução para este caso!

Mais uma vez obrigado pela participação!

Responder

4. Douglas Francisco

novembro 16, 2014 às 14:20

Landerson, tem como ler as mensagens recebidas do WhatsApp e direciona-la a um aplicativo Delphi ?? Tipo uma central de
Mensagens ???

Responder

5. Thiago

novembro 24, 2014 às 11:36

Funcionou muito, legal.


Obrigado …..

Responder
6. Brito

dezembro 9, 2014 às 11:04

Prezado Landerson , tem como acessar a agenda do celular neste mesmo contexto , ??

Responder

1. Landerson Gomes

dezembro 9, 2014 às 20:50

Olá Brito, seja muito bem vindo!


Não sei se entendi corretamente, mas o que você pergunta é se tem como comunicarmos nossa aplicação direto com a agenda
do dispositivo Android? Se sim a minha apresentação na Embarcadero Conference 2014 abordou isso em um dos exemplos,
note que na postagem há um link para download do código fonte do exemplo.

Espero que seja útil, obrigado por sua participação e até a próxima!

Responder

7. eliel

dezembro 18, 2014 às 08:44

Show de bola!

Responder

8. Dalvan Bevilaqua

fevereiro 17, 2015 às 17:38

tem como enviar apra um determinado contato???

Responder

1. Landerson Gomes

fevereiro 20, 2015 às 19:48

Olá Dalvan… acredito que tenha, só não conseguimos achar… nem em java nem em Delphi!
Mas continuo pesquisando.
Cheguei a passar o material de pesquisa utilizado na postagem para outros membros da comunidade Delphi, para que
tivéssemos uma força maior de busca, mas ainda não encontramos.
Quem sabe o Whatsapp um dia libera a fonte?!

Seja bem vindo ao blog e obrigado por sua participação!

Responder
1. Luciano

agosto 5, 2015 às 11:47

Pelo que vi tem que enviar um parametro chamado abid. Só que esse parâmetro é o id do contato na agenda do celular,
pelo que entendi.

Responder

1. Landerson Gomes

agosto 13, 2015 às 12:37

Olá Luciano… a integração com os contatos esbarra exatamente nisso, o ID vem do Android, não
exclusivamente do Whatsapp.
Mas seria exatamente por essa linha, você faria a seleção com base no ID do contato para o qual a mensagem
será transmitida.

Seja bem vindo e obrigado por sua participação!

Responder

2. warley

fevereiro 10, 2016 às 08:31

já é possivel , basta fazer uma simples modificação nesse fonte!

Responder

1. Juninho

março 4, 2016 às 12:16

que tipo de modificação?

Responder

9. Marcones

abril 8, 2015 às 20:01

Muito boa a Matéria. E ja existe a possibilidade de fazer o mesmo com o iOS? Ou seja, enviar o link para o Whatsapp do iPhone?

Responder

1. Landerson Gomes

abril 9, 2015 às 09:50


Olá Marcones, seja muito bem vindo!
Sinceramente não sei dizer a respeito de i-Phone, dediquei-me sempre ao ambiente Android… mas acredito que exista alguma
solução sim!

Lamento não poder ajudá-lo de maneira precisa ou mais esclarecedora, porém é um tema que realmente conta apenas com
minha “ignorância”.
Espero que consiga, e em conseguindo passe por aqui para deixar um feedback!

Obrigado por sua participação e até um próxima!

Responder

10. Fabricio

abril 14, 2015 às 17:21

Olá,
Obrigado por compartilhar o conhecimento, era exatamente o que eu procurava. Mas agora surgiu a necessidade de adicionar um
numero nos contatos do android, isso é possivel usando delphi? como fazer?

abraço.

Responder

1. Landerson Gomes

abril 14, 2015 às 17:39

Olá Fabrício, seja bem vindo!


Primeiramente obrigado por sua participação e pelas palavras!
Como cito na postagem, ainda não consegui achar uma forma de burlar o Whatsapp para conseguir diretamente isso. Pelo
pouco que li da documentação ele não disponibiliza e nem permite esse “tipo de coisa”… pensando friamente talvez seja
possível conseguindo o retorno da busca na agenda, entretanto vale lembrar que nem todos os seus contatos da agenda terão o
Whatsapp.
Enfim meu caro, esse ainda é nosso “dilema” nessa integração!
Caso consiga evoluir aí não deixe de compartilhar e postar um feedback conosco.

Um abraço e até a próxima!

Responder

1. Fabricio

abril 14, 2015 às 17:44

Olá,
Obrigado pelo retorno, mas quero realmente é inserir na agenda, pra driblar isso aí. Teria algum exemplo em XE7?

abraço.

Responder
11. Lúcio Coelho

junho 15, 2015 às 14:23

Boa tarde Landerson.


Estou tentando reproduzir exatamente como está descrito, mas estou recebendo a mensagem: not Found FMX.Helpers.Android.dcu

A versão do meu delphi é XE8 Enterprise

Responder

1. Luciano Petuco

julho 3, 2015 às 16:00

O meu também está dando o mesmo erro.


„FMX.Helpers.Android‟ not found.

Responder

12. Roger César

julho 29, 2015 às 18:35

Olá, boa tarde!


Primeiramente quero parabenizar e agradecer pelo artigo com conteúdo excelente e explicado de forma objetiva e clara!

Se possível gostaria de tirar uma dúvida … Estou tendo erro no momento da compilação . O projeto é compilado tudo corretamente,
no caso não estou executando em um emulador e sim em um aparelho próprio , e a aplicação não aparece na tela do dispositivo.
Aparece a primeira tela da compilação do projeto, mas o aplicativo em si não aparece . Teria alguma ideia do que pode ser ?!
Desde já agradeço. Grande abraço e sucesso!

Responder

1. Landerson Gomes

agosto 13, 2015 às 12:32

Bem vindo Roger!


Obrigado por sua participação!

Seria interessante você enviar versão do Delphi e versão do Android do dispositivo para que possa analisar, talvez seja algum
update já conhecido que esteja faltando.

Fico no aguardo de seu feedback.

Mais uma vez obrigado!

Responder
1. Roger César

agosto 17, 2015 às 23:45

Eu quem agradeço Landerson!


Consegui resolver o problema refazendo a aplicação , agora está funcionando 100% . Obrigado pelo retorno!
Estou com dúvida aqui se seria possível fazer o mesmo com o messenger do facebook , ou até mesmo apenas para
direcionar para um site específico …
Se sim, poderia me ajudar com algum exemplo ?!
Agradeço desde já !

Responder

13. Jaques

outubro 8, 2015 às 17:00

Adorei a dica, mas surgiu uma dúvida:

Como ficaria para enviar uma imagem ?

Obrigado!!!

Responder

1. Landerson Gomes

outubro 18, 2015 às 19:48

Olá Jaques… primeiramente seja bem vindo!


Com relação a sua dúvida, infelizmente pelo fato de não ser disponibilizada uma API pelo Whatsapp acaba sendo a base de
tentativa, infelizmente ainda não consegui.
Mais uma vez obrigado por sua participação, e conseguindo sucesso aí neste processo peço que dê uma feedback e se possível
compartilhe aqui a solução.

Até a próxima!

Responder

14. Gustavo

outubro 27, 2015 às 16:43

Landerson, tem como fazer isso em VCL?

Responder

15. Pingback: 2015 aqui no blog: Preferidos e números | Landerson Gomes

16. luis
janeiro 18, 2016 às 09:16

Hola , se puede enviar el mensaje directamente a una persona, ej


sendwhats(„mi mensaje‟, „nrotelefono‟)
sendwhats(„mi mensaje‟, „44446666‟)
Gracias

Responder

1. Landerson Gomes

fevereiro 10, 2016 às 09:50

Olá Luis obrigado pela contribuição… vou testar e dando certo posso postar aqui com seus respectivos créditos?
Ou você já tem essa solução postada em algum lugar para que eu utilize o link para seu post?

Mais uma vez obrigado por sua participação, seja bem vindo e volte sempre que puder!

Obs.: Peço desculpas pela demora na resposta!

Responder

2. Alexandre NT

abril 13, 2016 às 18:54

Olá Luis, como utilizar esse comando “sendwhats” ? testei de várias formas mas não consegui.

Responder

17. ISRAEL

abril 2, 2016 às 13:07

bom tutorial.. mais é posssivel enviar message direta a um numero no delphi a um whatapp numero tipo enviar a um numero
especifico do whataap direto…..

Responder

18. Eduardo Costa

abril 22, 2016 às 19:36

Fala Landerson, blz?


Onde está a opção de criar pelo VCL? não encontrei!!!

Responder

19. Vinicius
abril 26, 2016 às 20:34

Olá amigos Landerson e Kelver.

vou colocar aqui um código que montei, a partir do seu, para enviar arquivos pelo WhatsApp, no meu caso fotos (imagens em jpg).

Se testarem e/ou acharem melhor deletarem este post, fiquem a vontade. Eu já testei em vários dispositivos e funcionou legal.

Cada desenvolvedor deve fazer suas adaptações, eu mesmo estou usando de outra maneira para passar os arquivos a serem enviados,
como um array of string com a lista de arquivos que selecionei anteriormente ao uso da procedure.

Vamos lá…

procedure TFandroid.WhatsAppImage;
var
IntentWhats :JIntent;
FileUri :Jnet_Uri;
iArq :integer;
mensagem, sArqOrig1, sArqOrig2, sArqEnv1, sArqEnv2 :string;
ListArqs :JArrayList;
begin
if Edit1.Text.IsEmpty then
mensagem := „Teste de envio do Whatsapp com Delphi XE7. „+ #13+#10+
„Confira mais no blog http://www.vivaitaocara.com.br/landersongomes/„
else
mensagem := Edit1.Text;

sArqOrig1:=‟sua_pasta/arquivo1.jpg‟;
sArqOrig2:=‟sua_pasta/arquivo2.jpg‟;

//os arquivos devem ser copiados para uma pasta que o Whatapp possa ter acesso,
//como a pasta temporária do seu app (TPath.GetTempPath)
sArqEnv1:=TPath.GetTempPath +‟/‟+ ExtractFileName(sArqOrig1);
sArqEnv2:=TPath.GetTempPath +‟/‟+ ExtractFileName(sArqOrig2);

//então copiamos os arquivos para a pasta TPath.GetTempPath


//depois é aconselhável deletá-los
Tfile.Copy(sArqOrig1,sArqEnv1);
Tfile.Copy(sArqOrig2,sArqEnv2);

//criar o array para colocarmoa a lista de arquivos a serem enviados


ListArqs:= TJArrayList.Create;

FileUri:=TJNet_Uri.JavaClass.fromFile(TJFile.JavaClass.init(StringToJString(sArqEnv1)));
iArq:=0;
ListArqs.add(iArq,FileUri);

FileUri:=TJNet_Uri.JavaClass.fromFile(TJFile.JavaClass.init(StringToJString(sArqEnv2)));
inc(iArq);
ListArqs.add(iArq,FileUri);

IntentWhats := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_SEND);
IntentWhats.setType(StringToJString(„text/plain‟));
IntentWhats.putExtra(TJIntent.JavaClass.EXTRA_TEXT,StringToJString(mensagem));
//para audio („audio/mp3‟) ou („audio/mpeg3‟) ou ainda („audio/*‟)
IntentWhats.setType(StringToJString(„image/jpg‟));
IntentWhats.putParcelableArrayListExtra(TJIntent.JavaClass.EXTRA_STREAM,ListArqs);
IntentWhats.setPackage(StringToJString(„com.whatsapp‟));

//compartilhar diretamente com o WhatsApp


SharedActivity.startActivity(IntentWhats);

//substiua a próxima linha pela a anterior se quiser ter a opção de escolher com qual app compartilhar
//SharedActivity.startActivity (TJIntent.JavaClass.createChooser(IntentWhats,StrToJCharSequence(„Compartilhar com?‟)));
end;