Skip to content

Delphi Android get IMEI

Existe un código de identificación en cada teléfono móvil llamado IMEI.

IMEI (International Mobile Equipament Identity) es un código USSD pregrabado en todos los dispositivos móviles GSM.

Con este código podremos identificar de forma única a cualquier dispositivo para poder realizar acciones en nuestras App.

Como obtener el IMEI en Android

Para obtener el identificador IMEI desde Delphi en Android, es muy sencillo, pero deberemos tener en cuenta los permisos.

Para obtener el IMEI necesitamos tener aprobado por el usuario el permiso READ_PHONE_STATE.

Para ello debemos ir al menú Proyect -> Options -> Uses Permissions y activar el permiso READ_PHONE_STATE.

Android Get IMEI Permissions

Ahora vamos a solicitarle el permiso al usuario, para ello podemos realizar en cualquier momento antes de obtener el IMEI, en este caso lo realizaremos en el evento OnCreate del formulario.

implementation

uses
  System.Permissions, Androidapi.helpers, Androidapi.JNI.OS;

{$R *.fmx}

procedure TForm1.FormCreate(Sender: TObject);
var
  vPermisoPhoneState : string;
begin
  vPermisoPhoneState := JStringToString(TJManifest_permission.JavaClass.READ_PHONE_STATE);
  PermissionsService.RequestPermissions([vPermisoPhoneState], nil);

end;

En esto ya tendremos el permiso del usuario para poder meternos en su dispositivo móvil.

Ahora veremos como obteger el IMEI.

Get IMEI en Android desde Delphi

uses
  System.Permissions, Androidapi.helpers, Androidapi.JNI.OS, Androidapi.JNI.Telephony,
  Androidapi.JNI.Provider, Androidapi.JNIBridge, Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.JavaTypes, FMX.Helpers.Android;

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(getImei);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  vPermisoPhoneState: string;
begin
  vPermisoPhoneState := JStringToString(TJManifest_permission.JavaClass.READ_PHONE_STATE);
  PermissionsService.RequestPermissions([vPermisoPhoneState], nil);

end;

function TForm1.getImei(): string;
var
  vObjAux: JObject;
  vTM: JTelephonyManager;
  vIMEI: String;
begin
  vObjAux := SharedActivityContext.getSystemService(TJContext.JavaClass.TELEPHONY_SERVICE);
  if vObjAux <> nil then
  begin
    vTM := TJTelephonyManager.Wrap((vObjAux as ILocalObject).GetObjectID);
    if vTM <> nil then
      vIMEI := JStringToString(vTM.getDeviceId);
  end;
  if vIMEI = '' then
    vIMEI := JStringToString(TJSettings_Secure.JavaClass.getString(SharedActivity.getContentResolver,
      TJSettings_Secure.JavaClass.ANDROID_ID));

  Result := vIMEI;
end;

Otra opción al IMEI, es un ID que nos proporciona Android, cada vez que instalamos una App.

Si quieres conocer como obtener el Android ID, le el siguiente Artículo: Get Device Id.