Android Delphi XE5安卓应用程序中的TWebbrowser无法使用电话和短信链接
我已经为此挣扎了好几天,非常感谢任何人能给予我的帮助。电话:和短信:链接在Android上的任何网络浏览器中都可以正常工作。但它们在TWebBrowser内部根本不起作用 我发现它工作得很好,但我不知道如何从TWebBrowser内部启动函数。有一些仅适用于Windows的解决方案涉及类型库,但在Android上似乎什么都不起作用Android Delphi XE5安卓应用程序中的TWebbrowser无法使用电话和短信链接,android,delphi,mobile,firemonkey,Android,Delphi,Mobile,Firemonkey,我已经为此挣扎了好几天,非常感谢任何人能给予我的帮助。电话:和短信:链接在Android上的任何网络浏览器中都可以正常工作。但它们在TWebBrowser内部根本不起作用 我发现它工作得很好,但我不知道如何从TWebBrowser内部启动函数。有一些仅适用于Windows的解决方案涉及类型库,但在Android上似乎什么都不起作用 在Delphi XE5 Firemonkey移动应用程序中,有没有办法从TWebBrowser中的网页调用本机函数?或者,有没有办法让电话和短信链接在TWebBrow
在Delphi XE5 Firemonkey移动应用程序中,有没有办法从TWebBrowser中的网页调用本机函数?或者,有没有办法让电话和短信链接在TWebBrowser中正常工作 如果有人对此感到疑惑,正如我在问题中所述,Android上XE5上的TWebbrowser不会打开webview应用程序中最有用的一些链接,即SMS、Tel或Mailto链接 我通过在FMX.Webbrowser.Android中重写shouldOverrideUrlLoading函数解决了这个问题。要使用修改后的装置,请将FMX.Webbrowser.Android.pas复制到项目目录,然后将其添加到项目中。然后更改以下原始功能:
function TAndroidWebBrowserService.TWebBrowserListener.shouldOverrideUrlLoading(
P1: JWebView; P2: JString): Boolean;
begin
Result := False;
end;
到
就这样。FMX.Webbrowser.Android的默认位置是C:\Program Files(x86)\Embarcadero\RAD Studio\12.0\source\FMX我使用事件TWebBrowser(FMX)解决了这个问题 onShouldStartLoadWithRequest 和 OnDiFailLoadWitherRor
procedure TForm9.WebBrowser1DidFailLoadWithError(ASender: TObject);
begin
if (BackByError) then
begin
ProccessURL;
Timer2.Enabled := True;
end;
end;
procedure TForm9.WebBrowser1ShouldStartLoadWithRequest(ASender:
TObject;
const URL: string);
var
IPos1, IPos2 : Integer;
aURL : String;
begin
aURL := URL;
IPos1 := Pos('tel:', aURL);
IPos2 := Pos('mailto:', aURL);
BackByError := (IPos1 > 0) or (IPos2 > 0);
if (BackByError) then
URLError := aURL;
end;
procedure TForm9.ProccessURL;
var
i : JIntent;
Uri : JNet_Uri;
begin
Uri := TJnet_Uri.JavaClass.parse(stringtojstring(URLError));
i := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri);
try
SharedActivity.startActivity(i);
except
on e: Exception do
begin
ShowMessage('Error: ' + e.Message);
end;
end;
end;
procedure TForm9.Timer2Timer(Sender: TObject);
begin
if (BackByError) and (WebBrowser1.CanGoBack) then
begin
BackByError := False;
WebBrowser1.GoBack;
Timer2.Enabled := False;
end;
end;
procedure TForm9.WebBrowser1DidFailLoadWithError(ASender: TObject);
begin
if (BackByError) then
begin
ProccessURL;
Timer2.Enabled := True;
end;
end;
procedure TForm9.WebBrowser1ShouldStartLoadWithRequest(ASender:
TObject;
const URL: string);
var
IPos1, IPos2 : Integer;
aURL : String;
begin
aURL := URL;
IPos1 := Pos('tel:', aURL);
IPos2 := Pos('mailto:', aURL);
BackByError := (IPos1 > 0) or (IPos2 > 0);
if (BackByError) then
URLError := aURL;
end;
procedure TForm9.ProccessURL;
var
i : JIntent;
Uri : JNet_Uri;
begin
Uri := TJnet_Uri.JavaClass.parse(stringtojstring(URLError));
i := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, Uri);
try
SharedActivity.startActivity(i);
except
on e: Exception do
begin
ShowMessage('Error: ' + e.Message);
end;
end;
end;
procedure TForm9.Timer2Timer(Sender: TObject);
begin
if (BackByError) and (WebBrowser1.CanGoBack) then
begin
BackByError := False;
WebBrowser1.GoBack;
Timer2.Enabled := False;
end;
end;