我有一个包含Facebook按钮的WebView,它会打开一个已经发布的链接。我想知道如何拦截请求并在Facebook应用程序中打开链接,而不是在浏览器中打开。但是,如果智能手机上已安装了Facebook应用程序,则可以直接打开。
谢谢您的回复,对我的英语水平感到抱歉。
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("http://blablablacatchurl")) {
//we have intercepted the desired url call
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
});
如果您想查看是否有一种深度链接到Facebook应用程序的方式,请将URL打包到一个Intent中并启动它,然后查看响应。如果Facebook没有截获它,我认为您无法以其他方式执行您请求的第二部分。
webView.setWebViewClient(new MyWebClient());
private class MyWebClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//return super.shouldOverrideUrlLoading(view, url);
Uri uri;
try {
uri = Uri.parse(url);
} catch (NullPointerException e) {
// let Android deal with this
return true;
}
String host = uri.getHost(); //Host is null when user clicked on email, phone number, ...
if (host != null && host.equals("stackoverflow.com")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
else {
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs or anything else (email, phone number, ...)
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
}
@Override
public WebResourceResponse shouldInterceptRequest(final WebView view, WebResourceRequest request) {
Log.i(TAG, "shouldInterceptRequest loading " + request.getMethod() + " " + request.getUrl().toString());
String url = request.getUrl().toString();
request.getRequestHeaders();
if (url.contains("something important")){
view.post(new Runnable() {
@Override
public void run() {
if (view.canGoBack())
view.goBack();
else
Log.e(TAG, "can NOT go back");
}
});
}
return super.shouldInterceptRequest(view, request);
}