-
Notifications
You must be signed in to change notification settings - Fork 1
/
OpenViewUrl.pas
85 lines (74 loc) · 2 KB
/
OpenViewUrl.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
unit OpenViewUrl;
// Znalezione na http://delphi.org/2013/10/sending-a-url-to-another-app-on-android-and-ios-with-delphi-xe5/
// Posted by Jim McKeeth on 15-Oct-2013
// plus dodanie wsparcia dla Windowsa
interface
// URLEncode is performed on the URL
// so you need to format it protocol://path
function OpenURL(const URL: string; const DisplayError: Boolean = False): Boolean;
implementation
uses
IdURI, SysUtils, Classes, FMX.Dialogs,
{$IFDEF ANDROID}
FMX.Helpers.Android, Androidapi.JNI.GraphicsContentViewText,
Androidapi.JNI.Net, Androidapi.JNI.JavaTypes, Androidapi.Helpers;
{$ELSE}
{$IFDEF IOS}
iOSapi.Foundation, FMX.Helpers.iOS,
{$ELSE}
{$IFDEF MSWINDOWS}
ShellAPI, Windows;
{$ENDIF MSWINDOWS}
{$ENDIF IOS}
{$ENDIF ANDROID}
function OpenURL(const URL: string; const DisplayError: Boolean = False): Boolean;
{$IFDEF MSWINDOWS}
begin
if ShellExecute(0, PChar('open'), PChar(URL), nil, nil, SW_SHOWNORMAL) >= 32 then Exit(True)
else
begin
if DisplayError then showmessage('Error: Opening "' + URL + '" not supported.');
Exit(False);
end;
end;
{$ELSE}
{$IFDEF ANDROID}
var
intent: JIntent;
begin
// There may be an issue with the geo: prefix and URLEncode.
// will need to research
intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(URL))));
try
SharedActivity.startActivity(intent);
Exit(True);
except
on e: Exception do
begin
if DisplayError then showmessage('Error: ' + e.Message);
Exit(False);
end;
end;
end;
{$ELSE}
{$IFDEF IOS}
var
NSU: NSUrl;
begin
// iOS doesn't like spaces, so URL encode is important.
NSU := StrToNSUrl(TIdURI.URLEncode(URL));
if SharedApplication.canOpenURL(NSU) then Exit(SharedApplication.OpenURL(NSU))
else
begin
if DisplayError then showmessage('Error: Opening "' + URL + '" not supported.');
Exit(False);
end;
end;
{$ELSE}
begin
raise Exception.Create('Not supported!');
end;
{$ENDIF MSWINDOWS}
{$ENDIF IOS}
{$ENDIF ANDROID}
end.