当 webview 遇到自定义的协议时

当我们使用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;
		}
好了,遇到坑就这样了,也不算坑,就是自己经验不足

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值