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