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