Sei sulla pagina 1di 6

Obtendo o número do telefone Android com Delphi XE5

junho 30, 2014 Landerson Gomes 11 Comentários

Nesta postagem veremos como obter o número da linha telefônica associada ao chip
(Sim Card) de um dispositivo Android através de uma aplicação desenvolvida com
Delphi XE5.
Quando utilizar

Imagine que você como desenvolvedor necessite por algum motivo captar os números de telefones dos dispositivos que fizeram acesso à sua
aplicação… veja como é fácil fazer isso usando pouquíssimas linhas de código. Vamos lá ?!

Direto ao Delphi

Inicie um novo projeto Mobile no Delphi XE5, como já fizemos diversas vezes aqui no blog, selecione a opção Blank Application.

No seu formulário principal vamos inserir 1 Button e 1 Image e alterar suas propriedades como segue:

Button1
o Align -> alBottom
o Text -> Verificar Número do Telefone

Image1
o Align -> alClient
o MultiResBitmap -> [selecione uma imagem as seu gosto].

Ao final deste processo a interface de sua aplicação será próxima ao exibido na imagem abaixo:
Funcionamento da Aplicação: codificando

Antes de mais nada precisamos declarar os namespaces que “promovem a interação Delphi X Java/Android“. Para tal na cláusula uses da
seção Implementation do Formulário vamos inserir:

1implementation

3{$R *.fmx}

4uses

5 Androidapi.JNI.Telephony, Androidapi.JNI.Provider ,

6 Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText ,

Androidapi.JNI.JavaTypes,FMX.Helpers.Android;
7

A ideia para o funcionamento da aplicação é bem simples: o usuário pressiona o botão e uma mensagem será exibida na tela com o número
de telefone associado ao sim card do contido no dispositivo.

Para isso vamos codificar o evento on Click do botão como segue:

1
procedure TForm1.Button1Click(Sender: TObject);
2
var
3 TTelMgr: JTelephonyManager;

4 NumeroFone: String;

5 begin

6 TTelMgr := TJTelephonyManager.Wrap((SharedActivityContext.getSystemService(

7 TJContext.JavaClass.TELEPHONY_SERVICE) as ILocalObject).GetObjectID);

NumeroFone := JStringToString(TTelMgr.getLine1Number);
8

9
ShowMessage('Número: ' + NumeroFone);
10

11
end;
12
Que tal testarmos ?

Isso mesmo já funciona, já está pronto! Execute a aplicação e confira o resultado!

Nota 1: Em alguns casos o valor retornado pode ser nulo (NULL), isso se dá por que a operadora pode não ter
gravado o número da linha no chip (sim card). Para resolver o usuário pode no próprio dispositivo Android gravar
o número no chip. Outra solução para o caso de aplicação onde necessite armazenar essa informação é solicitá-la
ao usuário e mantê-la num banco de dados.
Nota 2: Como default a configuração do Delphi XE5 já traz habilitada a permissão READ_PHONE_STATE do Android, não
menciono a mesma na postagem. Mas faz-se necessário uma conferida na mesma e se não estiver habilitada é
imprescindível que o faça.

Até a próxima!!!

Relacionado

Delphi XE5 Enviando SMS direto de sua aplicação Android

Em "Delphi"
Construindo uma Tela Inicial para Aplicativos Android com Delphi XE5

Em "Delphi"

Delphi XE5 Efetuando chamadas telefônicas direto de sua aplicação móvel

Em "Delphi"

AndroiddelphiDelphi XE5desenvolvimentoTutorial

Navegação do post
Post anteriorLeitura de Código de Barras em Android com Delphi XE5Próximo postEncerrar aplicação Android através de Caixa de Diálogo com Delphi
XE5

11 opiniões sobre “Obtendo o número do telefone Android com Delphi XE5”

1. jailson

agosto 21, 2014 às 19:56

nao consegui compilar… JStringToString não declarado!

Responder

1. Landerson Gomes

agosto 22, 2014 às 12:50


Olá Jailson, Em uma outra postagem foi citado nos comentários pelo amigo Antônio o seguinte:

Landerson, a Androidapi.Jni.JavaTypes já estava adicionada. Para funcionar, é necessário adicionar também a


Androidapi.Helpers

Ele no caso, é usuário da versão XE6, se for este também o seu caso deve resolver.

Obrigado pela participação, e não se esqueça de postar o resultado!

Abraço.

Responder

1. jailson

agosto 22, 2014 às 16:19

Landerson Gomes primeiramente queria lhe parabenizar pelos seus projetos, vem ajudando muito tanto pra mim como
para outros. Teria como fazer um exemplo a questão do teclado ao ser acionado não cobrir os componentes (Edit por
Exemplo) e sim posicionar. Tem alguma orientação pra isso? obg!

Responder

1. Landerson Gomes

agosto 22, 2014 às 18:33

Meu grande Jailson… obrigado pelas palavras! A ideia do blog na verdade é apenas compartilhar desafios de
projetos que eu passe no cotidiano e exercitar um pouco a escrita e a didática! (rs)
Com relação a esta questão do teclado vou pesquisar, pois nesse último projeto que fiz, cheguei a mudar um
componente de posição para fugir do problema (rs).

Obrigado pela presença e conseguindo, em breve espero eu, posto algo aqui sobre o teclado não sobrepor os
componentes.

Abração!

Responder

1. jailson

agosto 22, 2014 às 18:47

Muito obg! Encontro a disposição tbm, gostaria de tirar algumas dúvidas srsr, mas vou deixa-las
surgirem em seu cotidiano para vc compartilhar conosco, vlw!

2. jailson

agosto 22, 2014 às 16:25

Ha! Deu certo sobre a postagem anterior, obg!


Responder

3. Eduardo

novembro 13, 2014 às 12:10

Alguém teve problema com a operadora Claro? Pq no meu exemplo não aparece o número do meu celular

Responder

4. Eduardo

novembro 21, 2014 às 10:59

Na operadora Claro o meu tbm não aparece. Tem como resolver isso?

Responder

1. Landerson Gomes

novembro 21, 2014 às 11:28

Olá Eduardo! Como citei na Nota 1 da postagem, algumas operadoras realmente não efetuam a gravação desta informação no
SIM CARD.
Única forma de resolver, é o usuário inserir essa informação. Isso pode ser feito em Configurações -> Gerenciar Cartão
SIM.

Espero que consiga solucionar o seu caso aí!

Até a próxima!

Responder

1. Eduardo

novembro 21, 2014 às 11:35

Eu utilizo um Galaxy Note 3 e já procurei onde colocar isso e não achei, vc sabe onde é?

Responder

5. Thiago

novembro 24, 2014 às 08:27

Eduardo, o meu também é um note 3 estou usando o xe7 a minha aplicação não chegou nem abrir. Abraços

Potrebbero piacerti anche