forked from cleyjulio/maps
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuApp.pas
159 lines (121 loc) · 3.97 KB
/
uApp.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
unit uApp;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.StrUtils, System.Permissions,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.DialogService,
map.example, ufrMap
{$IFDEF ANDROID}
,Posix.Unistd, Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNIBridge, Androidapi.JNI.Os
{$ENDIF}
;
type
TfrmApp = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
var frMap : TfrMap;
procedure onTerminateMap(Sender: TObject);
{ Public declarations }
end;
var
frmApp: TfrmApp;
implementation
{$R *.fmx}
{$IFDEF ANDROID}
function PermissoesAndroid(tipo : string) : Boolean;
const
permFineLocation = 'android.permission.ACCESS_FINE_LOCATION';
permCoarse = 'android.permission.ACCESS_COARSE_LOCATION';
permBatt = 'android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS';
permRead = 'android.permission.READ_EXTERNAL_STORAGE';
permWrite = 'android.permission.WRITE_EXTERNAL_STORAGE';
permBlue = 'android.permission.BLUETOOTH';
permWakeLock = 'android.permission.WAKE_LOCK';
var permissao, msg : String;
R : boolean;
begin
case AnsiIndexStr(UpperCase(tipo), ['PERMFINELOCATION', 'PERMCOARSE', 'PERMBATT', 'PERMREAD', 'PERMWRITE', 'PERMBLUE', 'PERMWAKELOCK']) of
0 : begin
permissao := permFineLocation;
msg := 'Permissão de acesso à localização não foi concedida!'
end;
1 : begin
permissao := permCoarse;
msg := 'Permissão de acesso à localização aproximada não foi concedida!';
end;
2 : begin
permissao := permBatt;
msg := 'Permissão para ignorar as opções de otimização de bateria não foi concedida!';
end;
3 : begin
permissao := permRead;
msg := 'Permissão para ler em armazenamento externo não foi concedida!'
end;
4 : begin
permissao := permWrite;
msg := 'Permissão para gravar em armazenamento externo não foi concedida!';
end;
5 : begin
permissao := permBlue;
msg := 'Permissão para acesso ao bluetooth não foi concedida!';
end;
6 : begin
permissao := permWakeLock;
msg := 'Permissão para o controle da tela acesa não foi concedida!';
end;
end;
PermissionsService.RequestPermissions([permissao],
procedure(const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray)
begin
if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then
R := true
else
begin
TDialogService.ShowMessage(msg);
R := False;
end;
end);
Result := R;
end;
{$ENDIF}
procedure TfrmApp.Button1Click(Sender: TObject);
var LTThread : TThread;
begin
frMap := TfrMap.Create(Self);
frMap.Parent := Self;
frMap.Align := TAlignLayout.Contents;
frMap.MapView.Visible := false;
frMap.LocationSensor.Active := True;
LTThread := TThread.CreateAnonymousThread(procedure()
begin
LTThread.Synchronize(tthread.CurrentThread, procedure()
begin
TMapExample.ShowPolygon(frMap.LookAt, frMap.Position, frMap.outLinePolygon.Points, frMap.MapView, frMap.RecNameArea, frMap.lblDistance,
frMap.lblNameTh, frMap.mapPolygon, frMap.LineDistance, frMap.Names);
end)
end);
LTThread.OnTerminate := OnTerminateMap;
LTThread.Start;
end;
procedure TfrmApp.FormCreate(Sender: TObject);
begin
{$IFDEF ANDROID}
PermissoesAndroid('permFineLocation');
{$ENDIF}
end;
procedure TfrmApp.onTerminateMap(Sender: TObject);
begin
if Sender is tthread then
begin
if Assigned(TThread(Sender).FatalException) then
begin
ShowMessage(Exception(TThread(Sender).FatalException).Message);
exit;
end;
end;
if Assigned(frMap) then
frMap.Mapview.Visible := True;
end;
end.