2012-03-10 86 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; 
     } 
    }