2012-03-10 20 views
1

誰かがWebViewを使用してTel:Geo:とMailto:リンクを正しく処理する方法を説明できますか?Android WebView:電話: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

: (あなたがボタンを戻って使用する場合は、コードの上、適切ではありません)

コールカスタムのWebView:

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; 
     } 
    } 
関連する問題