当我们使用webview打开自定义的schem的url时,如果不做处理会提示找不到网页,如下图:蓝色显示的url 是 baidumap://这个webview识别不了,所以我们要做一些处理,其次我们要理解这个自定义的协议给我们是用来干嘛的。
好了话不多说 处理如下:
if(url.startsWith("https") || url.startsWith("http")){
view.loadUrl(url);
}else{
try {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
} catch (ActivityNotFoundException e) {
// TODO: handle exception
}
}
当协议不是https 或者 http时 就 创建一个Intent 用来打开对应的应用,如果现在我手机安装了百度地图,就会打开手机上的百度地图app,如下图
有人就会问了,如果我手机上没有对应的应用怎么办呢,其实也没有问题,如果是第三方的自定义协议,如果手机上没有对应app,也会提供网页版的(不然要自定义协议干嘛,不过如果没安装的话 会报错,所以我上面的代码try catch了,保证程序不会崩溃)。比如百度地图,代码还是原来的代码,只是我把百度地图卸载了,所以会显示网页版的地图
还有问会说,我手机装有对应的app 但是我就是不想用手机上的app ,而是想用网页版的。这个也不是问题,就简单的判断一下schem,是https或者http就调用webview.load(url)方法,不是就直接返回true,返回后会继续跳到下一个url,如下
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.startsWith("https") || url.startsWith("http")){
view.loadUrl(url);
}
return true;
}
好了,遇到坑就这样了,也不算坑,就是自己经验不足