2010-09-08 13 views
8

Ich habe kein echtes Android-Gerät, daher verwende ich Emulatoren für alle meine Entwicklung für jetzt, sind mailto: Web-Links wirklich nicht auf Android-Geräten 2.1 und darunter? 2.2 funktioniert, aber jedes Mal, wenn ich einen mailto: Link auf 1.6 oder 2.1 gerade klicke, bekomme ich einen [nicht unterstützten Aktion] -Dialog. Wer möchte das mit einem echten Gerät testen?mailto: Links in Android nicht unterstützt?

+1

Mailto-Links, wo? In einem WebView? –

+0

im mobilen Browser mit 10.0.2.2, um zu localhost zu gelangen. – Chamilyan

Antwort

31

Sie haben es selbst in einem 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; 
    } 
} 

In Ihrer Tätigkeit zu behandeln halten Sie einen Verweis auf MyWebViewClient und weisen Sie es zu Ihrem webview mit setWebViewClient(mWebClient).

+3

Ein kleiner Vorbehalt in Bezug auf diese Lösung: Die Methode gibt immer "true" zurück, was dem WebView mitteilt, dass "unsere Implementierung von WebViewClient alles handhabt" - dies kann Probleme bei Edge-Fällen von Umleitungen verursachen, wie zum Beispiel 'location.replace()' in JavaScript . Anstelle von 'view.loadUrl (url); return true; 'Sie können' return false; 'eingeben, um denselben Effekt zu erzielen, ohne dass Fehler auftreten. Siehe meine längere Erklärung in [diese Antwort auf eine andere Frage] (http://stackoverflow.com/a/14335335/241456) – daniel

1

wäre ein einfacher Weg sein:

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

'if (MailTo.isMailTo (url)) {// ...' – SK9