fbpx

Obtendo o número do telefone Android com Delphi XE5

Numero do Telefone Android com Delphi XE5

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á ?!

Numero do Telefone Android com Delphi XE5

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.

Novo Delphi Mobile Project

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

  • Button1
    • Align -> alBottom
    • Text -> Verificar Número do Telefone
  • Image1
    • Align -> alClient
    • 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:

Interface do Aplicativo

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:

implementation

{$R *.fmx}
uses
  Androidapi.JNI.Telephony, Androidapi.JNI.Provider ,
  Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText ,
  Androidapi.JNI.JavaTypes,FMX.Helpers.Android;

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:

procedure TForm1.Button1Click(Sender: TObject);
var
  TTelMgr: JTelephonyManager;
  NumeroFone: String;
begin
  TTelMgr := TJTelephonyManager.Wrap((SharedActivityContext.getSystemService(
            TJContext.JavaClass.TELEPHONY_SERVICE) as ILocalObject).GetObjectID);
  NumeroFone := JStringToString(TTelMgr.getLine1Number);

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

end;

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!!!

 

,

Comente