Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Android versiyon bilgilerini çekme
#1
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;
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#2
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;
Cevapla
#3
(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ı...
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi XE5'ten Delphi 11.2'e Android Geliştirme ve Maintenance Hikayesi Abdullah ILGAZ 2 239 17-01-2023, Saat: 08:31
Son Yorum: nguzeller
  Delphi ve Android 12 Yetkileri Hızlı Çözüm Rehberi Abdullah ILGAZ 0 192 16-01-2023, Saat: 01:52
Son Yorum: Abdullah ILGAZ
  [Çözümlü] Delphi 11.2 ile Google Play'e uygulama yükleme hatası (android:exported) Abdullah ILGAZ 1 138 10-01-2023, Saat: 17:01
Son Yorum: mcuyan
  [Çözümlü] Delphi 11.2 ile Android 32-bit ApkSignerTool hatası Abdullah ILGAZ 0 137 10-01-2023, Saat: 12:01
Son Yorum: Abdullah ILGAZ
  [Çözümlü] Delphi 11.2 güncellemesi sonrası android-support-v4.dex.jar hatası Abdullah ILGAZ 0 119 10-01-2023, Saat: 10:50
Son Yorum: Abdullah ILGAZ



Konuyu Okuyanlar: 1 Ziyaretçi