Analitcs

Pesquisar no conteúdo do blog.atlabs.com.br

domingo, 10 de agosto de 2014

DELPHI - Firemonkey: Get Phone, IMEI, Operator and Other - Obter Telefone, IMEI, Operadora e Outras XE6 (Android)

Reações: 

Abaixo está a unit com as instruções para obter algumas informações do celular utilizando Delphi. Testado e funcionando no XE6
unit uAtlabs;

interface

uses
  //Uses que precisa, mas que ja vem declarada no Delphi XE6
  System.Types
  ,System.SysUtils

   //Uses que precisa ser declarada a parte
  , Androidapi.JNI.Telephony
  , Androidapi.JNI.Provider
  , Androidapi.JNIBridge
  , Androidapi.JNI.GraphicsContentViewText
  , Androidapi.JNI
  , Androidapi.JNI.JavaTypes
  , FMX.Helpers.Android
  , FMX.StdCtrls

  ;

Type
  TATLabs_Convert = Class(TObject)
  Public
    Class Function JStringToString(const JStr: JString): string;
    Class function StringToJString(const Str: string): JString;
    Class function PhoneInfo(): String;
  end;


implementation

{ TATLabs_Convert }

//Função que converte JString para String (não existente no XE6)
class function TATLabs_Convert.JStringToString(const JStr: JString): string;
begin
  if JStr = nil then
    Result := ''
  else
    Result:= JNIStringToString(TJNIResolver.GetJNIEnv, JNIString((JStr as ILocalObject).GetObjectID));
end;

//Função que converte String para JString (não existente no XE6)
class function TATLabs_Convert.StringToJString(const Str: string): JString;
var
  LocalRef: JNIObject;
begin
  LocalRef := StringToJNIString(TJNIResolver.GetJNIEnv, Str);
  Result := TJString.Wrap(LocalRef);
  TJNIResolver.DeleteLocalRef(LocalRef);
end;

Class function TATLabs_Convert.PhoneInfo(): String;
var
  ATelephonyManager: JTelephonyManager;
  AStr: UnicodeString;
begin
  ATelephonyManager := TJTelephonyManager.Wrap((SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE) as ILocalObject).GetObjectID);
  AStr := 'TELEFONE: '         + TATLabs_Convert.JStringToString(ATelephonyManager.getLine1Number) + CarriageReturn + LineFeed +
          'IMEI: '            + TATLabs_Convert.JStringToString(ATelephonyManager.getDeviceId) + CarriageReturn + LineFeed +
          'NetworkCountryIso: '   + TATLabs_Convert.JStringToString(ATelephonyManager.getNetworkCountryIso) + CarriageReturn + LineFeed +
          'NetworkOperator: '     + TATLabs_Convert.JStringToString(ATelephonyManager.getNetworkOperator) + CarriageReturn + LineFeed +
          'NetworkOperatorName: ' + TATLabs_Convert.JStringToString(ATelephonyManager.getNetworkOperatorName) + CarriageReturn + LineFeed +
          'SimOperatorName: '     + TATLabs_Convert.JStringToString(ATelephonyManager.getSimOperatorName) + CarriageReturn + LineFeed +
          'SimSerialNumber: '     + TATLabs_Convert.JStringToString(ATelephonyManager.getSimSerialNumber) + CarriageReturn + LineFeed +
          'SubscriberId: '        + TATLabs_Convert.JStringToString(ATelephonyManager.getSubscriberId) + CarriageReturn + LineFeed +
          'VoiceMailNumber: '     + TATLabs_Convert.JStringToString(ATelephonyManager.getVoiceMailNumber) + CarriageReturn + LineFeed
          ;


  if trim(AStr) = '' then
  begin
    AStr := 'Favor verificar a chave "" no arquivo "AndroidManifest.template.xml"';
    // Ou ir em Project => Options => Uses Permissions e colocar True na permissão "Read phone state"
  end;

  Result :=  AStr;
end;

end.


Modo de usar
//Lembre-se de delcarar uAtlabs na Uses
ShowMessage(TATLabs_Convert.PhoneInfo);



Nota: Em alguns casos o valor retornado referente ao "TELEFONE" 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 ou arquivo.


Funções de conversão do nosso amigo Felipe:
http://blog.atlabs.com.br/2014/08/delphi-firemonkey-how-to.html

Post realizado com base na postagem do Landerson Gomes no Link abaixo:
http://vivaitaocara.com.br/landersongomes/delphi/obtendo-o-numero-do-telefone-android-com-delphi-xe5

Não esqueça de contribuir utilizando a pesquisa no rodapé do Post.

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.

Max Gehringer