频道分类

Delphi获取Android上的IMEI

作者:admin 来源: 日期:2020/11/12 8:59:19 人气: 标签:

 

每个称为IMEI的手机中都有一个识别码。

IMEI(国际移动设备识别码)是在所有GSM移动设备上预先记录的USSD代码。

借助此代码,我们可以唯一标识能够在我们的App中执行操作的任何设备。

如何在Android上获取IMEI
要从Android上的Delphi获取IMEI标识符,这非常简单,但是我们必须考虑权限。

要获得IMEI,我们需要获得用户批准的READ_PHONE_STATE权限。

为此,我们必须转到菜单项目->选项->使用权限并激活READ_PHONE_STATE权限。

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;



Delphi Android获取设备ID
随着移动设备的使用,程序员迫切需要能够识别每个设备。

要执行此操作,我们有两种主要方法,一种是通过移动设备本身的IMEI,即设备硬制造商提供的ID。或第二种方式是Android为已安装的应用提供的ID。

我个人使用第二个选项,因为对于第一个选项,获得IMEI,我们必须获得用户对READ_PHONE_STATE许可的批准,因为这是危险的许可。

从Delphi获取Android上的设备ID
要从Delphi获取Android Id,我们只需要进行几行编程即可。

我们想澄清一下这个ID可能会有所不同。什么时候变化?例如,在将移动设备恢复为出厂设置时或在植根时,它可能会有所不同。

因此,如果用户安装了该应用程序,我们将获得一个ID,但是如果用户将设备重置为出厂设置,然后重新安装我们的应用程序,则我们将获得与第一个ID不同的ID。

为了在Android中获取ID,我们需要两个单元:Androidapi.JNI.Provider和Androidapi.helpers,其功能如下:

Uses
  Androidapi.JNI.Provider, Androidapi.helpers;
 
function GetDeviceId(): string;
begin
  try
    Result := JStringToString(TJSettings_SECURE.JavaClass.getString(TAndroidHelper.Activity.getContentResolver, TJSettings_SECURE.JavaClass.ANDROID_ID));
  except
    Result := '';
  end;
end;

上一篇:Delphi 安卓获得设备 ID下一篇:没有资料