2016-11-22 207 views
0

我正在使用Android Webview的網站。我已經包括mailto聯繫和電子郵件給朋友。在網絡側的代碼片段:MailTo不能在Android WebView中工作

對於聯繫人:<a href="mailto:[email protected]">[email protected]</a>

對於推薦給朋友:<a href="mailto:?subject=Check out this product&amp;body=I found this awesome product%20http://www.example.com/product-detail/61/" title="Email to a Friend" class=""><span>Email to a Friend</span></a>

我包括爲Android側下面的代碼片段在shouldOverrideUrlLoading方法:

@Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if(url.startsWith("http:") || url.startsWith("https:")) { 
      return false; 
     } 

     else if (url.startsWith("tel:")) { 
      Intent tel = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
      startActivity(tel); 
      return true; 
     } 
     else if(url.startsWith("mailto:")) { 
      MailTo mailTo = MailTo.parse(url); 
      String emailAddress = mailTo.getTo(); 
      String subject = mailTo.getSubject(); 
      String body = mailTo.getBody(); 
      String cc = mailTo.getCc(); 
      Intent mail = new Intent(Intent.ACTION_SEND,Uri.parse(url)); 
      mail.setType("application/octet-stream"); 
      mail.putExtra(Intent.EXTRA_EMAIL, new String[]{emailAddress}); 
      mail.putExtra(Intent.EXTRA_SUBJECT, subject); 
      mail.putExtra(Intent.EXTRA_TEXT, body); 
      mail.putExtra(Intent.EXTRA_CC, cc); 
      startActivity(mail); 
      return true; 
     } 
     return false; 
    } 

這與聯繫人正常工作。但是,它並不適用於電子郵件給朋友。 SubjectComposed email字段中有空白,但是字段To包括/product-detail/105/,其必須爲空。當我在移動瀏覽器中打開網站時,它工作正常。那麼,我需要在上面的代碼中爲webview來處理這個問題呢?可以做些什麼來解決這個問題?

+0

你有沒有嘗試過這種'mail.setType( 「信息/ RFC822」);'。如果不嘗試,而不是'mail.setType這個(「應用程序/ octet-stream「);' –

+0

我已經使用過了:'mail.setType(」application/octet-stream「);'。請參閱上面的代碼片段。我如何處理多個'mailto'? –

+0

我建議你試試這個'mail.setType(「message/rfc822」);' –

回答

1

我用這個解決我的問題:

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("tel:")) { 
      Intent tel = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
      startActivity(tel); 
      return true; 
     } 
     else if (url.contains("mailto:")) { 
      view.getContext().startActivity(
        new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 
      return true; 

     }else {  
      view.loadUrl(url); 
      return true; 
     } 
    }