我使用WebView类在我的apk中显示教程。我喜欢它,因为我可以管理和更新教程而无需在apk中进行任何更改。我将所有教程html文件保存在我们网站上的特定文件夹中。
我的问题是,有任何事件可以让我捕捉开始导航(当用户点击链接时)。我想看看用户在我的教程中点击了什么链接,只要用户在我们网站上的教程文件夹中导航,他就应该在我的apk的WebView中导航。但是,如果有任何链接指向教程文件夹之外,则应阻止导航到此链接,并将导航传递给浏览器。
我不确定我是否清楚地解释了它。我是Android开发的新手。请参阅下面的我在C#for Windows phone中的代码示例,我需要在Android apk中使用相同的
/// <summary>
/// navigation in the application's browser goes as long as it is in the "stockscreenerapp" folder
/// if user goes out of this folder ("stockscreenerapp" cannot be found in the URL string) then
/// external default browser is called for further navigation
/// </summary>
private async void webBrowser1_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args) {
if (null != args.Uri) {
string url = args.Uri.ToString();
int i = url.IndexOf("stockscreenerapp"); /* check whether "stockscreenerapp" is in the URL address */
if (i == -1) { args.Cancel = true; await Windows.System.Launcher.LaunchUriAsync(args.Uri); /*if it is not we call external browser and pass URL to it*/}
else { imgLoading.Visibility = Visibility.Visible; /* show loading image while page is loading */ }
}
}
答案 0 :(得分:1)
尝试使用WebViewClient并监听onPageStarted。这样,您就可以获取所点击链接的网址,检查它是否在您的教程之外,并告诉WebView stopLoading是否为。
在代码中,它可能看起来像这样(警告,未经测试):
WebView webView = new WebView(context);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted (WebView view, String url, Bitmap favicon) {
if(Tutorial.doesNotContain(url))
view.stopLoading();
view.goBack();
}
});