Quando se fala de Mobilidade garantir que informações corporativas sejam visualizadas apenas por “pessoal” autorizado é essencial. Nessa postagem vamos implementar a autenticação de uma aplicação Delphi XE5 Android através do IMEI do dispositivo.
IMEI a identificação do dispositivo
IMEI é o acrônimo de Mobile Equipment Identity (Identificação Internacional de Equipamento Móvel). Trata-se de uma sequência de números e caracteres especiais única para cada dispositivo. A ideia é bem parecida com o MAC address das placas de rede. Isso facilita na hora de localizar um aparelho específico em meio às centenas de dispositivos colocados no mercado todos os meses.
Criando a aplicação Mobile Delphi XE5
Crie um novo projeto Mobile no Delphi XE5. No fonte do form da aplicação vamos adicionar as seguintes referências na clausula uses:
uses FMX.Platform.Android, Androidapi.JNI.Telephony, Androidapi.JNI.Provider , Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, FMX.Helpers.Android;
No form vamos adicionar um Button, alterar sua propriedade Text para “Capturar IMEI” e a propriedade Name para btnCapturarIMEI.
Vamos codificar seu evento onClick como abaixo:
procedure TForm1.btnCapturarIMEIClick(Sender: TObject);
var
obj: JObject;
tm: JTelephonyManager;
IMEI: String;
begin
obj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
if obj <> nil then
begin
tm := TJTelephonyManager.Wrap( (obj as ILocalObject).GetObjectID );
if tm <> nil then
IMEI := JStringToString(tm.getDeviceId);
end;
if IMEI = '' then
IMEI := JStringToString(TJSettings_Secure.JavaClass.getString( SharedActivity.getContentResolver, TJSettings_Secure.JavaClass.ANDROID_ID));
ShowMessage('IMEI :' + #13 + IMEI);
end;
Fácil… extremamente fácil…
Execute a aplicação e clicando sobre o botão o IMEI do seu dispositivo será exibido.
Vimos como é fácil capturar o IMEI através de uma aplicação Android Delphi XE5.
Implementando um banco de dados contendo os IMEI's autorizados e fazendo uma pesquisa neles você pode garantir o acesso apenas aos dispositivos previamente cadastrados no seu servidor de aplicação.
É isso… simples assim!
Até a próxima!



Muito legal o exemplo
Valeu a dica..
Deu certinho!
Aguardamos mais… abração
Gostei muito parabéns esperamos mais dessas dicas são muito valiosas
Olá Rodrigo… que bom que tem gostado. Espero sim poder trazer algo interessante e usa sempre.
Um abraço e obrigado pela participação.
Como posso conseguir o IMEI do aparelho no IOS?
Olá Guilherme, obrigado por sua interação.
Infelizmente não tenho nada publicado em relação a IOS. Foquei mesmo sempre no Android.
Lamento não poder contribuit mas realmente o meu conhecimento envolvendo a maçã é bem próximo do nulo.
Espero que consiga encontrar a resposta.
Um abraço.
Olá Landerson Gomes, muito obrigado por compartilhar essas funções, todas são muito uteis. Comecei a desenvolver uma aplicação Android no XE6 com integração com um Sistema Desktop cujo seu o BD é Firebird, consigo conectar sem problemas na rede local, minha dificuldade é conectar por outra Rede. Você teria alguma solução para isso? Não possuo um IP Fixo, mas já direcionei diversas portas do modem/roteador e também já tentei usar o No-IP. Você poderia me ajudar? Obrigado!
Yago bom dia.
Tentarei entrar em contato com você. Mas como já mencionei não tem nada de mais elaborado que isso não. Única coisa que precisa garantir é que as rotas externas conseguirão acessar a porta direcionada ao serviço.
Me mande seu endereço skype.
Um abraço.
GOSTARIA DE UM APLICATIVO PARECIDO COM ESSE QUE RETORNA O IMEI, MAS QUE RETORNASSE O NUMERO DO CELULAR. OK, SE TIVESSE ALGUÉM QUE DESENVOLVESSE TAM BÉM ME AJUDARIA,
GRATO
RUBERVAL
Olá Ruberval… posto algo sobre isso na próxima postagem.
Mas já deixo adiantado o seguinte: o número do telefone fica gravado no chip e tem casos em que a operadora não faz isso.
Cheguei a achar que tinha um erro de programação quando na verdade fui pesquisar e descobri que na tecnologia GSM (base de telefonia móvel no Brasil) isso ocorre.
Semana que vem disponibilizo um tutorial sobre isso ok?!
Abraço e obrigado pela participação!
Fiz direitinho como vc disse, mas esta dando Undeclared identifier: ‘JStringToString’ vc pode me ajudar fazendo um grande favor????
Olá Tiago! Seja bem vindo ao blog!
Com relação à mensagem, acredito que você esteja usando o Delphi XE6, já foi sinalizado em algumas postagens que no XE6 a função JStringToString foi transportada para a Namespace Androidapi.Helpers.
Confirme se com essa alteração resolve.
Abraço e não esqueça de postar aqui um feedback!
Muito obrigado, estava com o mesmo erro e agora deu certinho.
… no XE7 resolve !!!,
Obrigado
Fala Landerson, ressucitando o post e informando que utilizando a Namespace Androidapi.Helpers consegui capturar o IMEI do aparelho. Obrigado.
Olá Clark… que bom que achou aí! Espalhado pelos comentários nos diversos posts há essa sinalização… A partir do XE6 a Android.Helpers passa a levar por exemplo a StringToJString.
Enfim, se você já resolveu ótimo… fica então meu agradecimento por sua participação!
Obrigado e até uma próxima.
Galera, boa tarde! Alguém sabe como capturar o IP do dispositivo? Tipo: 192.168.0.1??
pra quem esta usando Delphi Seattle, algumas coisas mudaram. Segue antes e depois o codigo comentario é na versão antiga.
Units declaradas:
Androidapi.JNI.GraphicsContentViewText,AndroidApi.Helpers,
Androidapi.JNI.Telephony,Androidapi.JNI.Provider,Androidapi.JNIBridge,
Androidapi.JNI.JavaTypes, Androidapi.JNI.Os, Androidapi.jni.App;
// obj := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
obj := TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
//IMEI := JStringToString(TJSettings_Secure.JavaClass.getString(SharedActivity.getContentResolver, TJSettings_Secure.JavaClass.ANDROID_ID));
IMEI := JStringToString(TJSettings_Secure.JavaClass.getString( TAndroidHelper.Activity.getContentResolver, TJSettings_Secure.JavaClass.ANDROID_ID));
Perfeito Jefferson… todas essas funções foram refatoradas e as mudanças são necessárias!
Obrigado por sua participação e até a próxima!
Alguém conseguiu obter o IMEI do Iphone?
Não estou conseguindo compilar o “SharedActivityContext.getSystemService” está com erro ‘undeclared indetifier’. Estou usando o XE8 e não consegui achar solução. Como faço??
Muito bom. Mais como seria para pegar o numero de telefone do iOS ???
Olá Gleury bem vindo! Infelizmente não cheguei a me aventurar no universo da Apple, o que me deixa sem subsídios para tentar ajudá-lo.
De qualquer forma gostaria de agradecer sua participação!
Abraço e até a próxima!
Bacana Landerson, parabéns. Saberia dizer como posso pegar o número que está chamando e os últimos registros de chamadas no Android?
Olá Marcelo bem vindo!
Ainda não tentei nada do tipo, vou dar uma pesquisada aqui e gostaria de sugerir que você também procure.
Se achar primeiro não deixe de avisar.
Obrigado por sua participação e até a próxima!