Delphi Can

Orjinalini görmek için tıklayınız: Android versiyon bilgilerini çekme
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhabalar

Android üzerinde çalışan uygulamanın versiyon Info kısmında yer alan versionCode, versionName gibi bilgileri nasıl alabilirim.
Daha önceden aşağıdaki şekilde android.helpers ile bilgileri alan bir yapı kurmuştum fakat Version Info içindeki bilgilere ulaşamadım.

Bu bilgiye ulaşmanın başka bir yolu varmıdır.

Uygulamayı 10.3.1 üzerinde geliştiriyorum.

function fn_VersiyonBilgileri(): TVersiyonBilgileri;
var
 VersiyonBilgileri: TVersiyonBilgileri;
begin
 {$IFDEF ANDROID}
 try
   VersiyonBilgileri.BASE_OS := JStringToString(TJBuild_VERSION.JavaClass.BASE_OS);
 except
   VersiyonBilgileri.BASE_OS := '';
 end;
 try
   VersiyonBilgileri.CODENAME := JStringToString(TJBuild_VERSION.JavaClass.CODENAME);
 except
   VersiyonBilgileri.CODENAME := '';
 end;
 try
   VersiyonBilgileri.INCREMENTAL := JStringToString(TJBuild_VERSION.JavaClass.INCREMENTAL);
 except
   VersiyonBilgileri.INCREMENTAL := '';
 end;
 try
   VersiyonBilgileri.PREVIEW_SDK_INT := TJBuild_VERSION.JavaClass.PREVIEW_SDK_INT;
 except
   VersiyonBilgileri.PREVIEW_SDK_INT := 0;
 end;
 try
   VersiyonBilgileri.RELEASE := JStringToString(TJBuild_VERSION.JavaClass.RELEASE);
 except
   VersiyonBilgileri.RELEASE := '';
 end;
 try
   VersiyonBilgileri.SDK := JStringToString(TJBuild_VERSION.JavaClass.SDK);
 except
   VersiyonBilgileri.SDK := '';
 end;
 try
   VersiyonBilgileri.SDK_INT := TJBuild_VERSION.JavaClass.SDK_INT;
 except
   VersiyonBilgileri.SDK_INT := 0;
 end;
 try
   VersiyonBilgileri.SECURITY_PATCH := JStringToString(TJBuild_VERSION.JavaClass.SECURITY_PATCH);
 except
   VersiyonBilgileri.SECURITY_PATCH := '';
 end;

 Result := VersiyonBilgileri;

 {$ENDIF}
end;
unit AppVersion;

{$IFDEF MACOS}
 {$DEFINE APPLE}
{$ENDIF}

{$IFDEF IOS}
 {$DEFINE APPLE}
{$ENDIF}


interface

 function GetApplicationVersion: string;

implementation

{$IFDEF ANDROID}
uses
 FMX.Helpers.Android, FMX.Platform.Android,
 Androidapi.JNI.JavaTypes, Androidapi.Helpers,
 Androidapi.JNI.GraphicsContentViewText,System.SysUtils;
{$ENDIF}
{$IFDEF APPLE}
uses
 {$IFDEF IOS}
 iOSapi.Foundation,
 {$ELSE}
 Macapi.Foundation,
 {$ENDIF}
 Macapi.Helpers,
 Macapi.ObjectiveC,System.SysUtils;
{$ENDIF}
{$IFDEF MSWINDOWS}
uses
 System.Types, System.SysUtils, Windows;
{$ENDIF}


function GetApplicationVersion: string;
{$IFDEF ANDROID}
var
 PackageManager: JPackageManager;
 PackageInfo: JPackageInfo;
begin
 Result := '?';
 try
   PackageManager := TAndroidHelper.Context.getPackageManager; //SharedActivityContext.getPackageManager;
   PackageInfo := PackageManager.getPackageInfo(TAndroidHelper.Context.getPackageName, 0);  //SharedActivityContext.getPackageName, 0);
   Result := JStringToString(PackageInfo.versionName)+'.'+inttostr(PackageInfo.versionCode);
 except
 end;
end;
{$ENDIF}
{$IFDEF IOS}
var
 AppKey: Pointer;
 AppBundle: NSBundle;
 BuildStr : NSString;
begin
 Result := '?';
 try
   AppKey := (StrToNSStr('CFBundleVersion') as ILocalObject).GetObjectID;

   AppBundle := TNSBundle.Wrap(TNSBundle.OCClass.mainBundle);
   BuildStr := TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppKey));
   Result := UTF8ToString(BuildStr.UTF8String);

 except
 end;
end;
{$ENDIF}
{$IFDEF MSWINDOWS}
var
 sExe: string;
 Size, Handle: DWORD;
 Buffer: TBytes;
 FixedPtr: PVSFixedFileInfo;
begin
 Result := '?';
 try
   sExe := ParamStr(0);
   Size := GetFileVersionInfoSize(PChar(sExe), Handle);
   if (Size = 0) then
     exit; // RaiseLastOSError;
   SetLength(Buffer, Size);
   if not GetFileVersionInfo(PChar(sExe), Handle, Size, Buffer) then
     exit; // RaiseLastOSError;
   if not VerQueryValue(Buffer, '\', Pointer(FixedPtr), Size) then
     exit; // RaiseLastOSError;
   Result := Format('%d.%d.%d.%d',
     [LongRec(FixedPtr.dwFileVersionMS).Hi,  //major
       LongRec(FixedPtr.dwFileVersionMS).Lo,  //minor
       LongRec(FixedPtr.dwFileVersionLS).Hi,  //release
       LongRec(FixedPtr.dwFileVersionLS).Lo]) //build

 except

 end;
end;
{$ENDIF}
{$IFDEF OSX}
var
 AppKey: Pointer;
 AppBundle: NSBundle;
 BuildStr : NSString;
begin
 Result := '?';
 try
   AppKey := (StrToNSStr('CFBundleVersion') as ILocalObject).GetObjectID;

   AppBundle := TNSBundle.Wrap(TNSBundle.OCClass.mainBundle);
   BuildStr := TNSString.Wrap(AppBundle.infoDictionary.objectForKey(AppKey));
   Result := UTF8ToString(BuildStr.UTF8String);

 except
 end;
end;
{$ENDIF}

end.


Kullanışı

  lbversiyon.Caption:='Versiyon : '+ AppVersion.GetApplicationVersion;
(16-12-2021, Saat: 11:02)adelphiforumz Adlı Kullanıcıdan Alıntı: [ -> ]Merhabalar

Android üzerinde çalışan uygulamanın versiyon Info kısmında yer alan versionCode, versionName gibi bilgileri nasıl alabilirim.
Daha önceden aşağıdaki şekilde android.helpers ile bilgileri alan bir yapı kurmuştum fakat Version Info içindeki bilgilere ulaşamadım.

Bu bilgiye ulaşmanın başka bir yolu varmıdır.

Uygulamayı 10.3.1 üzerinde geliştiriyorum.

function fn_VersiyonBilgileri(): TVersiyonBilgileri;
var
 VersiyonBilgileri: TVersiyonBilgileri;
begin
 {$IFDEF ANDROID}
 try
   VersiyonBilgileri.BASE_OS := JStringToString(TJBuild_VERSION.JavaClass.BASE_OS);
 except
   VersiyonBilgileri.BASE_OS := '';
 end;
 try
   VersiyonBilgileri.CODENAME := JStringToString(TJBuild_VERSION.JavaClass.CODENAME);
 except
   VersiyonBilgileri.CODENAME := '';
 end;
 try
   VersiyonBilgileri.INCREMENTAL := JStringToString(TJBuild_VERSION.JavaClass.INCREMENTAL);
 except
   VersiyonBilgileri.INCREMENTAL := '';
 end;
 try
   VersiyonBilgileri.PREVIEW_SDK_INT := TJBuild_VERSION.JavaClass.PREVIEW_SDK_INT;
 except
   VersiyonBilgileri.PREVIEW_SDK_INT := 0;
 end;
 try
   VersiyonBilgileri.RELEASE := JStringToString(TJBuild_VERSION.JavaClass.RELEASE);
 except
   VersiyonBilgileri.RELEASE := '';
 end;
 try
   VersiyonBilgileri.SDK := JStringToString(TJBuild_VERSION.JavaClass.SDK);
 except
   VersiyonBilgileri.SDK := '';
 end;
 try
   VersiyonBilgileri.SDK_INT := TJBuild_VERSION.JavaClass.SDK_INT;
 except
   VersiyonBilgileri.SDK_INT := 0;
 end;
 try
   VersiyonBilgileri.SECURITY_PATCH := JStringToString(TJBuild_VERSION.JavaClass.SECURITY_PATCH);
 except
   VersiyonBilgileri.SECURITY_PATCH := '';
 end;

 Result := VersiyonBilgileri;

 {$ENDIF}
end;

FMX.DeviceInfo-master https://github.com/rzaripov1990/FMX.DeviceInfo indirip kullanabilirsiniz. Çok kullanışlı...