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?
Antwort
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)
.
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
wäre ein einfacher Weg sein:
if(url.startsWith("mailto:")){
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
view.getContext().startActivity(intent);
}
'if (MailTo.isMailTo (url)) {// ...' – SK9
Mailto-Links, wo? In einem WebView? –
im mobilen Browser mit 10.0.2.2, um zu localhost zu gelangen. – Chamilyan