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





nao consegui compilar… JStringToString não declarado!
Olá Jailson, Em uma outra postagem foi citado nos comentários pelo amigo Antônio o seguinte:
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.
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!
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!
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!
Ha! Deu certo sobre a postagem anterior, obg!
Alguém teve problema com a operadora Claro? Pq no meu exemplo não aparece o número do meu celular
Na operadora Claro o meu tbm não aparece. Tem como resolver isso?
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!
Eu utilizo um Galaxy Note 3 e já procurei onde colocar isso e não achei, vc sabe onde é?
Eduardo, o meu também é um note 3 estou usando o xe7 a minha aplicação não chegou nem abrir. abraços