2010-09-08 58 views
8

我沒有一個真正的Android設備,所以我現在正在使用模擬器來進行我的所有開發,而mailto:web鏈接真的不支持Android設備2.1及更低版本? 2.2的作品,但每次我點擊1.6或2.1上的mailto:鏈接,我都會得到[不支持的動作]對話框。任何有真實設備的人都想測試一下嗎?mailto:Android中不支持的鏈接?

+1

mailto鏈接在哪裏?在WebView中? – 2010-09-08 19:46:07

+0

在使用10.0.2.2的移動瀏覽器中進入本地主機。 – Chamilyan 2010-09-09 01:40:13

回答

31

你必須自己處理的WebViewClient

public class MyWebViewClient extends WebViewClient { 
    Activity mContext; 
    public MyWebViewClient(Activity context){ 
     this.mContext = context; 
    } 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {  
     if(url.startsWith("mailto:")){ 
      MailTo mt = MailTo.parse(url); 
      Intent i = new Intent(Intent.ACTION_SEND); 
      i.setType("text/plain"); 
      i.putExtra(Intent.EXTRA_EMAIL, new String[]{mt.getTo()}); 
      i.putExtra(Intent.EXTRA_SUBJECT, mt.getSubject()); 
      i.putExtra(Intent.EXTRA_CC, mt.getCc()); 
      i.putExtra(Intent.EXTRA_TEXT, mt.getBody()); 
      mContext.startActivity(i); 
      view.reload(); 
      return true; 
     } 
     view.loadUrl(url); 
     return true; 
    } 
} 

在你的活動你保持一個參考MyWebViewClient並將其與setWebViewClient(mWebClient)分配給您的webview

+3

關於此解決方案的一個小警告:該方法始終返回true,它告訴WebView「我們的WebViewClient的實現處理所有事情」 - 這可能會導致重定向的邊緣情況出現問題,例如在JavaScript中使用'location.replace()' 。而不是'view.loadUrl(url);返回true;'你可以輸入'return false;'來實現相同的效果而不會引入錯誤。看到我在[這個答案的另一個問題]更長的解釋(http://stackoverflow.com/a/14335335/241456) – daniel 2013-01-15 10:12:48

1

一個更簡單的方法是:

if(url.startsWith("mailto:")){ 
    Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); 
    view.getContext().startActivity(intent); 
} 
+1

'如果(MailTo.isMailTo(url)){// ...' – SK9 2013-09-04 15:05:51

相關問題