我关注this tutorial. 我正在为我的一个域制作一个Android应用程序,它是一个非常基本的查看器,显示主页,用户可以导航到应用程序内的其他页面(而不是弹出窗口,要求他们使用巫婆浏览器)但是,我也有网站中的电话号码作为链接,例如在this .tel page中,您可以将鼠标悬停在上面并查看calto:xxxxx,当我在浏览器中点击手机时,它会根据我的意愿为我提供拨号。当我在我的webview应用程序上点击它时,它也会通过调出拨号应用程序来工作。
但是在实现以下代码以打开应用程序内的所有页面和链接后,它不起作用。它在应用程序内部给我一条消息,因为我无法打开它
// Force links and redirects to open in the WebView instead of in a browser
mWebView.setWebViewClient(new WebViewClient());
所以我用这个来制作其他请求的域名(我也希望电话号码)在另一个应用程序,浏览器中打开(也期待拨号应用程序),它适用于其他网站,但是当我点击手机时数字它只给我这个错误并强制关闭应用程序
public class MyAppWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(Uri.parse(url).getHost().endsWith("html5rocks.com")) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}
错误
02-24 18:56:20.065 15423-15423/com.clicnet.bandeirantestel A/chromium﹕ [FATAL:jni_android.cc(271)] Check failed: false.
02-24 18:56:20.075 15423-15423/com.clicnet.bandeirantestel A/libc﹕ Fatal signal 6 (SIGABRT), code -6 in tid 15423 (bandeirantestel)
任何帮助表示赞赏 感谢
答案 0 :(得分:0)
我用这个
解决了
public boolean shouldOverrideUrlLoading(WebView view, String url)
{Uri query_string=Uri.parse(url);
String query_scheme=query_string.getScheme();
String query_host=query_string.getHost();
if ((query_scheme.equalsIgnoreCase("https") || query_scheme.equalsIgnoreCase("http"))
&& query_host!=null // && query_host.equalsIgnoreCase(Uri.parse(URL_SERVER).getHost())
&& query_string.getQueryParameter("new_window")==null
)
{return false;//handle the load by webview
}
try
{Intent intent=new Intent(Intent.ACTION_VIEW, query_string);
String[] body=url.split("\\?body=");
if (query_scheme.equalsIgnoreCase("sms") && body.length>1)
{intent=new Intent(Intent.ACTION_VIEW, Uri.parse(body[0]));
intent.putExtra("sms_body", URLDecoder.decode(body[1]));
}
view.getContext().startActivity(intent);//handle the load by os
}
catch (Exception e) {}
return true;
}
这是第一个解决方案here的编辑版本(我在打开此问题之前尝试过)并注意到我如何评论它将排除我的主页的部分,这样它将打开WebView中的所有页面