webview中出现err_unknow scheme处理方案

失败的页面加载的url都是自定义scheme开头的(alipays://、weixin://)。webview只能识别http://或https://开头的url, 因此如果要识别其他的scheme (如: alipays、weixin、mailto、tel ... 等等), 你就要自行处理. 一般其他的scheme都是由原生APP处理, 即用一个Intent去调起能处理此scheme开头的url的APP. 代码如下:

Intent intent =newIntent(Intent.ACTION_VIEW, Uri.parse(customUrl));

startActivity(intent);


用intent处理自定义的scheme开头的url时, 代码必须加上try...catch... , 应为如果你的手机上没有安装处理那个scheme的应用 (整个手机上没有一个应用能处理那个scheme), 那么就会crash (这跟隐式启动Activity是一个道理) !!!


二. 解决方法

给WebView设置WebViewClient并重写WebViewClient的shouldOverrideUrlLoading()方法

完整代码如下:

WebViewClient webViewClient =newWebViewClient(){

@OverridepublicbooleanshouldOverrideUrlLoading(WebView view, String url){

if(url ==null) return  false;


if(url.startsWith("http://") || url.startsWith("https://") ) {     //处理http和https开头的url    

view.load(url);

return true;

 }   else{

try{

Intent intent =newIntent(Intent.ACTION_VIEW, Uri.parse(url));                

 startActivity(intent); 

  return  true;   

}   catch(Exception e) {        //防止crash (如果手机上没有安装处理某个scheme开头的url的APP, 会导致crash)

return false;    }

  }

};

webview.setWebViewClient(webViewClient);

你可能感兴趣的:(webview中出现err_unknow scheme处理方案)