| 
					
				 | 
			
			
				@@ -4,6 +4,10 @@ interface 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 uses
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   System.Messaging,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  {$IF DEFINED(ANDROID) AND (RTLVersion >= 33)}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Androidapi.JNI.Os,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  System.Permissions,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  {$ENDIF}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo;
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -22,8 +26,13 @@ type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     procedure btn4Click(Sender: TObject);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     procedure FormCreate(Sender: TObject);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     procedure FormDestroy(Sender: TObject);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    procedure FormShow(Sender: TObject);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     { Private declarations }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {$IF DEFINED(ANDROID) AND (RTLVersion >= 33)}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    procedure PermissionsCheck;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    procedure PermissionsResultHandler(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    {$ENDIF}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     procedure DoReceivedImagePath(const Sender: TObject; const M: TMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     procedure DoCancelReceivingImage(const Sender: TObject; const M: TMessage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   public
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -267,4 +276,33 @@ begin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   TMessageManager.DefaultManager.Unsubscribe(TMessageCancelReceivingImage, DoCancelReceivingImage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 end;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+procedure TForm1.FormShow(Sender: TObject);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+begin
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  {$IF DEFINED(ANDROID) AND (RTLVersion >= 33)}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  PermissionsCheck;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  {$ENDIF}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+end;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{$IF DEFINED(ANDROID) AND (RTLVersion >= 33)}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+procedure TForm1.PermissionsCheck;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+begin
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if TJBuild_VERSION.JavaClass.SDK_INT >= 23 then
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.CAMERA),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)], PermissionsResultHandler);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+end;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+procedure TForm1.PermissionsResultHandler(const APermissions: TArray<string>;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const AGrantResults: TArray<TPermissionStatus>);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+begin
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if PermissionsService.IsEveryPermissionGranted(
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    [JStringToString(TJManifest_permission.JavaClass.CAMERA),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE),
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)]) then
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    mmo1.Lines.Add('Permission granted')
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  else
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    mmo1.Lines.Add('Permission not granted');
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+end;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{$ENDIF}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 end.
 
			 |