Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi 10.3 Rio Permissions
#1
Merhaba,

Permissions tanımlama ile ilgili dünden beri araştırmalar yapıyordum ve Android 8.0 üstü cihazlarda 'Uses Permissions' bölümünde işaretleme yapılsa da el ile tekrar yetkilendirme yapma zorunluluğu hasıl olmuş .Araştırmalar sonucunda telefon kamerasını çalıştırıp resmi image nesnesine ekleme sonucuna ulaştım. Belki forumda vardı ben göremedim ama sizlerle de paylaşmak istedim : 

Forma TActionList,TButton ve TImage yerleştirdim. TButtonun Events -> Action Kısmında 'TakePhotoFromCameraAction' seçtim. TButtonun StyleLookup kısmında 'cameratoolbutton' seçtim.

uses kısmına;

 FMX.MediaLibrary, FMX.DialogService, System.Messaging, System.JSON, System.Permissions
 {$IFDEF ANDROID}
 , Androidapi.Jni.Os
 , Androidapi.Helpers
 {$ENDIF}

 unitlerini ekledim.

private de;

    {$IFDEF ANDROID}
    fCamera,fReadStorage,fWriteStorage,fBlueTooth : string;
    {$ENDIF}

tanımlamasını yaptım.

formcreate de;

  fCamera       := JStringToString(TJManifest_permission.JavaClass.CAMERA);
  fReadStorage  := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
  fWriteStorage := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);
  fBlueTooth    := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH);

nesnelere değerlerini tanımladım.

formshow da;

  {$IF DEFINED(IOS) or DEFINED(ANDROID)}
  PermissionsService.RequestPermissions([fCamera,fReadStorage,fWriteStorage,fBlueTooth], RequestPermissionsResult, DisplayRationale);
  {$ENDIF}

methodunu çağırdım.

Method da bulunan 'RequestPermissionsResult, DisplayRationale' tanımlamaları

{$IF DEFINED(IOS) or DEFINED(ANDROID)}
procedure TForm???.RequestPermissionsResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
begin
  if (Length(AGrantResults) = 4) and (AGrantResults[0] = TPermissionStatus.Granted) and (AGrantResults[1] = TPermissionStatus.Granted) and
  (AGrantResults[2] = TPermissionStatus.Granted) and (AGrantResults[3] = TPermissionStatus.Granted) then
     // execute procedure ...  as before on form show ...
  else
  Begin
    AGrantResults[0] := TPermissionStatus.Granted;
    AGrantResults[1] := TPermissionStatus.Granted;
    AGrantResults[2] := TPermissionStatus.Granted;
    AGrantResults[3] := TPermissionStatus.Granted;
    //TDialogService.ShowMessage('No ....');
    //Application.Terminate;
  End;
  // če ne bi dovolili permission bi moral showerror
end;
{$ENDIF}

{$IF DEFINED(IOS) or DEFINED(ANDROID)}
procedure TForm???.DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);
var
  I: Integer;
  RationaleMsg: string;
begin
  for I := 0 to High(APermissions) do
  begin
    if APermissions[i] = fCamera then
      RationaleMsg := RationaleMsg + 'Camera'
    else if APermissions[i] = fReadStorage then
      RationaleMsg := RationaleMsg + 'Read Storage' + SLineBreak + SLineBreak
    else if APermissions[i] = fWriteStorage then
      RationaleMsg := RationaleMsg + 'Write Storage'+ SLineBreak + SLineBreak
   else if APermissions[i] = fBlueTooth then
      RationaleMsg := RationaleMsg + 'BlueTooth';
  end;
  TDialogService.ShowMessage(RationaleMsg,
    procedure(const AResult: TModalResult)
    begin
      APostRationaleProc;
    end)
end;
{$ENDIF}

Son olarak da TButton -> Event -> Action -> OnDidFinishTaking olayının içine;

image1.Bitmap.Assign(Image);

yazdım. Derleyip çalıştırınca sonuç gayet güzel.

İyi çalışmalar
Cevapla
#2
Merhaba,
Android dinamik izin talebi, forumda bir çok yerde var. Yeniden kendi kullanım yönteminizle birlikte bizimle paylaşmanız iyi olmuş .
Paylaşım ve katkılarınızdan dolayı teşekkür ederim.
Önemli: Paylaştığınız kodlarda, lütfen kod biçimlendirme kullanın. (Bknz: DelphiCan Forum Kuralları)
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#3
(29-05-2020, Saat: 11:16)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Android dinamik izin talebi, forumda bir çok yerde var. Yeniden kendi kullanım yönteminizle birlikte bizimle paylaşmanız iyi olmuş .
Paylaşım ve katkılarınızdan dolayı teşekkür ederim.
Önemli: Paylaştığınız kodlarda, lütfen kod biçimlendirme kullanın. (Bknz: DelphiCan Forum Kuralları)

Tamamdır hocam yeni yeni öğreniyorum ben de dikkat ederim  Smile
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi Firebase Post işlemi yhackup 11 4.067 29-06-2020, Saat: 09:29
Son Yorum: Fesih ARSLAN
  IOS ta görünüm sorunu (Delphi 10.4) cemcolak 2 232 17-06-2020, Saat: 13:39
Son Yorum: mrmarman
  Delphi 10.4 Frame tab order sorunu metinayhan 10 759 11-06-2020, Saat: 15:51
Son Yorum: mrmarman
  Delphi Admob Nasıl Eklenir? Admob Tecrübelerim hakanharbeli 3 1.591 13-05-2020, Saat: 11:59
Son Yorum: Bay_Y
  [ÇÖZÜLDÜ] Delphi iOS Mesaj Sorunu Halil Han Badem 10 1.127 12-05-2020, Saat: 13:09
Son Yorum: Halil Han Badem



Konuyu Okuyanlar: 2 Ziyaretçi