|
https://sourceforge.net/projects/fmxflyfilesutils/
code\SourceFlyFilesUtils.pas
[mw_shl_code=delphi,true]{$IFDEF POSIX}
const
{$IFDEF UNDERSCOREIMPORTNAME}
_PU = '_';
{$ELSE}
_PU = '';
{$ENDIF}
const
libc = '/usr/lib/libc.dylib';
libpthread = '/usr/lib/libpthread.dylib';
libiconv = '/usr/lib/libiconv.dylib';
libdl = '/usr/lib/libdl.dylib';
{$IF not Declared(_PU)}
const
// On Mac OSX, cdecl names have a preceeding underscore
// if x86 native backend.
{$IF Defined(UNDERSCOREIMPORTNAME)}
_PU = '_';
{$ELSE}
_PU = '';
{$ENDIF}
{$EXTERNALSYM _PU}
{$ENDIF}
const
{$IFNDEF IOS}
_INODE_SUFFIX = '$INODE64';
{$ELSE IOS}
_INODE_SUFFIX = '';
{$ENDIF !IOS}
{$EXTERNALSYM _INODE_SUFFIX}
function _system(Name: MarshaledAString): Integer; cdecl;
external libc name _PU + 'system';
{$ENDIF}
function GetEncodeURL(const URL: string; Https:Boolean = True): string;
begin
Result := URL;
if FileExists(Result) then
begin
{$IFDEF MSWINDOWS}
{$ELSE}
if Result.Substring(1, 1) <> '/' then
begin
Result := '/' + Result;
end;
Result := 'file://' + Result;
{$ENDIF}
end
else
begin
if Https then
begin
Result := 'https://' + URL;
end
else
begin
Result := 'https://' + URL;
end;
Result := TIdURI.URLEncode(Result);
end;
end;
function OpenFileOnExtApp(const FileName: string; Https:Boolean = True): Boolean;
{$IFDEF ANDROID}
var
Intent: JIntent;
FileExtension: string;
mime: JMimeTypeMap;
MIMEType: JString;
FileToOpen: string;
begin
// There may be an issue with the geo: prefix and URLEncode.
// will need to research
Result := False;
FileExtension := AnsiLowerCase(ExtractFileExt(FileName));
mime := TJMimeTypeMap.JavaClass.getSingleton();
MIMEType := nil;
if mime <> nil then
begin
MIMEType := mime.getMimeTypeFromExtension(StringToJString(FileExtension));
end;
if MIMEType <> nil then
begin
// 调用相应程序打开当前程序
Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
FileToOpen := GetEncodeURL(FileName, Https);
Intent.setDataAndType(StrToJURI(FileToOpen), MIMEType);
try
SharedActivity.startActivity(Intent);
Result := True;
except
end;
end;
end;
{$ELSE}
{$IFDEF IOS}
var
NSU: NSUrl;
AURL: string;
begin
Result := False;
AURL := GetEncodeURL(FileName, Https);
// iOS doesn't like spaces, so URL encode is important.
NSU := StrToNSUrl(AURL);
if TOSVersion.Check(9) or SharedApplication.canOpenURL(NSU) then
try
Result := SharedApplication.openUrl(NSU);
except
end;
end;
{$ELSE}
{$IFDEF MSWINDOWS}
var
AURL: string;
begin
Result := False;
AURL := GetEncodeURL(FileName, Https);
try
ShellExecute(GetActiveWindow, 'open', PChar(AURL), '', '', SW_MAXIMIZE);
Result := True;
except
end;
end;
{$ELSE}
var
M:TMarshaller;
AURL: string;
begin
Result := False;
//AURL := 'open -a Safari ' + GetEncodeURL(AURL);
AURL := 'open ' + GetEncodeURL(FileName, Https);
try
_system(M.AsAnsi(AURL, CP_UTF8).ToPointer);
Result := True;
except
end;
// raise Exception.Create('Not supported!');
end;
{$ENDIF MSWINDOWS}
{$ENDIF IOS}
{$ENDIF ANDROID}[/mw_shl_code]
|
|