一个跨平台的、获取设备信息的单元 uGetDeviceInfo.pas

一个跨平台的、获取设备信息的单元 uGetDeviceInfo.pas-Delphi 大神网
一个跨平台的、获取设备信息的单元 uGetDeviceInfo.pas
此内容为免费资源,请登录后查看
0
免费资源
欢迎加入全网最大Delphi 技术交流群 682628230

感谢群友 流浪 提供

//convert pas to utf8 by ¥
unit uGetDeviceInfo;

interface

uses
  SysUtils, FMX.DeviceInfo,


  {$IFDEF MSWINDOWS}
  Winapi.Windows, Winapi.ShellAPI,
  {$ENDIF}

  {$IFDEF IOS}
  Macapi.ObjCRuntime, iOSapi.CoreGraphics, FMX.Platform.iOS, FMX.Helpers.iOS, Macapi.ObjectiveC, Macapi.Helpers,
  iOSapi.Foundation, iOSapi.UIKit,
  {$ENDIF}

  {$IFDEF ANDROID}
  FlyFmxUtils, Androidapi.JNI.JavaTypes, Androidapi.JNI.Telephony, Androidapi.JNI.Net,
  Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers, Androidapi.Log, Androidapi.JNI.Provider, Androidapi.JNI.Os,
  Androidapi.JNI.Embarcadero, Androidapi.JNI.App, Androidapi.JNIBridge,
  {$ENDIF}
  IniFiles, Classes;


//获取Android版本
function GetAndroidVersion: Integer;
//Android版本大于10则返回AndroidID

function GetAndroidId: string;

//获取手机的IMEI
function GetIMEI: string;
//获取IOS的UUID

function GetUUID: string;
//获取手机的型号

function GetPhoneType: string;
////获取系统
//function GetOS:String;
//获取系统型号

function GetOSVersion: string;

function IsPadDevice: Boolean;

var
  //在Windows下面模拟是否是平板
  WinIsPadDevice: Boolean;

implementation

function IsPadDevice: Boolean;
begin
  Result := False;
//  Result:=True;
  {$IFDEF MSWINDOWS}

  {$ENDIF}
  {$IFDEF ANDROID}
  Result := FlyFmxUtils.GetScreenInches > 6;
  {$ENDIF}
  {$IFDEF IOS}
  Result := FMX.Helpers.iOS.IsPad;
  {$ENDIF}
end;

function GetUUID: string;
  {$IFDEF IOS}
var
  Device: UIDevice;
  {$ENDIF}
begin
  {$IFDEF IOS}
  Result := '';
  try
    Device := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice);
    Result := string(Device.identifierForVendor.UUIDString.UTF8String);
//      if (Device<>nil) and (Device.uniqueIdentifier<>nil) then
//      begin
//        Result := string(Device.uniqueIdentifier.UTF8String);
//      end;
  except
    //IOS11,64位会报错
  end;
  {$ENDIF}
end;

function GetIMEI: string;
  {$IFDEF ANDROID}
var
  obj: JObject;
  tm: JTelephonyManager;
  IMEI: string;
  {$ENDIF}
begin
  {$IFDEF ANDROID}
  if GetAndroidVersion < 29 then
  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;
  end
  else
  begin
    Result := GetAndroidId;
  end;
  {$ELSE}
  Result := 'A1234567890';
  {$ENDIF}
end;

function GetAndroidVersion: Integer;
  {$IFDEF ANDROID}
var
  BuildVersion: JBuild_VERSIONClass;
  {$ENDIF}
begin
  {$IFDEF ANDROID}
  BuildVersion := TJBuild_VERSION.JavaClass; // 获取 Build.VERSION 的 Java 类
  Result := BuildVersion.SDK_INT; // 获取 SDK_INT 属性,即 Android 版本号
  {$ELSE}
  Result := 0;
  {$ENDIF}
end;

function GetAndroidId: string;
  {$IFDEF ANDROID}
var
  AndroidId: JString;
  {$ENDIF}
begin
  {$IFDEF ANDROID}
  try
    AndroidId := TJSettings_Secure.JavaClass.getString(SharedActivity.getContentResolver, TJSettings_Secure.JavaClass.ANDROID_ID);
    Result := UpperCase(JStringToString(AndroidId));
  except
    Result := 'A1234567890';
  end;
  {$ELSE}
  Result := 'A1234567890';
  {$ENDIF}
end;

function GetPhoneType: string;
begin
  {$IFDEF IOS}
  //iPhone1,1
  Result := '';
  try
    Result := Trim(GetSysInfoByName('hw.machine'));
  except
    //IOS11,64位会报错
  end;
  {$ELSE}
  Result := DeviceInfo.diDevice;
  {$ENDIF}
end;

//function GetOS:String;
//begin
//  case TOSVersion.Platform of
//    pfWindows:
//    begin
//      Result:='Windows';
//    end;
//    pfMacOS:
//    begin
//      Result:='MacOS';
//    end;
//    pfiOS:
//    begin
//      Result:='IOS';
//    end;
//    pfAndroid:
//    begin
//      Result:='Android';
//    end;
//    pfWinRT:
//    begin
//      Result:='WinRT';
//    end;
//    pfLinux:
//    begin
//      Result:='Linux';
//    end;
//  end;
//end;

function GetOSVersion: string;
begin
  Result := TOSVersion.ToString;
end;

initialization
  WinIsPadDevice := False;

end.

 

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享