Android中WebView,打开第三方应用的问题

可以通过网页打开第三方应用,这个iOSAndroid都可以做到,通过自定义的schema。说这个的网上有一大堆,这里就不赘述了。

比如,乐视手机网站,有app专享片源,你使用UC浏览器打开他的网页,点击指定节目的时候,就会弹出他的客户端,开始播放节目。

观察点击海报的url,是形如“letv://xxxxxx/xxxxxx”的跳转地址,显然不是一个网页,是没办法直接跳转的。

搜狐视频网页也是一样的。


那么问题来了,UC可以做到,但是自己的WebView不行。

使用WebView加载“letv://xxxxxx/xxxxxx”这个地址时,会直接报错,说这个url打不开。


显然时应该对非http开头的url做一些处理的。但应该在哪里加处理呢?


查官方的API, 如果希望点击链接由自己处理,而不是新开android的系统browser中响应该链接。

可以给WebView添加一个事件监听对象(WebViewClient)并重写其中的一些方法:shouldOverrideUrlLoading:对网页中超链接按钮的响应。


总体思想就是拿到url之后,先自己过滤一下,可以自定义一些处理方式。

如果自己处理了,就return true,后续处理就不会再管这个url了;否则返回false,交给后面继续执行。类似MediaPlayer的onError。


好吧,就把我处理的代码片段贴上来吧,以作备忘。


[java]  view plain  copy
  1. mWebView.setWebViewClient(new WebViewClient() {  
  2.     public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  3.           
  4.         Log.d("shouldOverrideUrlLoading", url);  
  5.         // 处理自定义scheme  
  6.         if (!url.startsWith("http")) {  
  7.             Log.i("shouldOverrideUrlLoading""处理自定义scheme");  
  8.             Toast.makeText(mContext, "需要下载客户端收看", Toast.LENGTH_LONG)  
  9.                     .show();  
  10.             try {  
  11.                 // 以下固定写法  
  12.                 final Intent intent = new Intent(Intent.ACTION_VIEW,  
  13.                         Uri.parse(url));  
  14.                 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK  
  15.                         | Intent.FLAG_ACTIVITY_SINGLE_TOP);  
  16.                 mContext.startActivity(intent);  
  17.             } catch (Exception e) {  
  18.                 // 防止没有安装的情况  
  19.                 e.printStackTrace();  
  20.             }  
  21.             return true;  
  22.         }  
  23.         return false;  
  24.     }  
  25.   
  26.     @Override  
  27.     public void onReceivedError(WebView view, int errorCode,  
  28.             String description, String failingUrl) {  
  29.         // Auto-generated method stub  
  30.         super.onReceivedError(view, errorCode, description, failingUrl);  
  31.     }  
  32.   
  33.     @Override  
  34.     public void onPageFinished(WebView view, String url) {  
  35.         // Auto-generated method stub  
  36.         super.onPageFinished(view, url);  
  37.     }  
  38.   
  39.     @Override  
  40.     public void onPageStarted(WebView view, String url, Bitmap favicon) {  
  41.         // Auto-generated method stub  
  42.         super.onPageStarted(view, url, favicon);  
  43.     }  
  44.   
  45. });  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值