Delphi Can
Android versiyon bilgilerini çekme - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Mobil Platform - FireMonkey (FMX) (https://www.delphican.com/forumdisplay.php?fid=7)
+--- Konu Başlığı: Android versiyon bilgilerini çekme (/showthread.php?tid=6481)



Android versiyon bilgilerini çekme - adelphiforumz - 16-12-2021

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;



Cvp: Android versiyon bilgilerini çekme - elixir84 - 16-12-2021

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;



Cvp: Android versiyon bilgilerini çekme - Jakarta2 - 27-12-2021

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