2012-03-10 99 views
1

有人可以请帮忙解释如何使用WebView正确处理Tel:Geo:和Mailto:链接。Android WebView:Tel:Geo:Mailto:正确处理

当前所有链接都会导致“页面无法显示”错误。

下面是我使用的代码是从其他建议的解决方案放在一起:

mWebView = (WebView) findViewById(R.id.webview); 
mWebView.getSettings().setJavaScriptEnabled(true); 
mWebView.getSettings().setBuiltInZoomControls(true); 
mWebView.getSettings().setUseWideViewPort(true); 
mWebView.loadUrl("http://www.google.com"); 
mWebView.setWebViewClient(new HelloWebViewClient()); 

} 
private class HelloWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("tel:")) { 
      startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url))); 
      return true; 
     } else if (url.startsWith("mailto:")) { 
      url = url.replaceFirst("mailto:", ""); 
      url = url.trim(); 
      Intent i = new Intent(Intent.ACTION_SEND); 
      i.setType("plain/text").putExtra(Intent.EXTRA_EMAIL, new String[]{url}); 
      startActivity(i); 
      return true; 
     } else if (url.startsWith("geo:")) { 
      Intent searchAddress = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(searchAddress);   
      return true; 
     } else { 
      view.loadUrl(url); 
      return true; 
     } 
    } 
} 

}

回答

1

This answer工作对我来说,你可以使用Intent.ACTION_VIEW每一个情况,因为它迫使设备查找可能的选择以显示给用户。

0

这个代码是我工作: (上面的代码是不正确的,如果你将使用后退按钮)

调用自定义网页视图:

view.setWebViewClient(new CustomWebViewClient()); 

现在扩展的WebView:

private class CustomWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      if(url.startsWith("http:") || url.startsWith("https:")) { 
       return false; 
      } 
      // Otherwise allow the OS to handle it 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 
      return true; 
     } 
    }