2010-09-08 12 views
8

No tengo un dispositivo Android real, así que estoy usando emuladores para todo mi desarrollo por el momento, son mailto: ¿los enlaces web realmente no son compatibles con los dispositivos Android 2.1 y siguientes? 2.2 funciona, pero cada vez que hago clic en un enlace mailto: en 1.6 o 2.1, aparece un cuadro de diálogo [acción no admitida]. ¿Alguien con un dispositivo real quiere probar esto?mailto: enlaces no compatibles en Android?

+1

mailto enlaces donde? En un WebView? –

+0

en el navegador móvil utilizando 10.0.2.2 para llegar a localhost. – Chamilyan

Respuesta

31

usted tiene que manejar por sí mismo en un 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; 
    } 
} 

En su actividad se mantiene una referencia a MyWebViewClient y asignarlo a su webview con setWebViewClient(mWebClient).

+3

Una advertencia menor con respecto a esta solución: el método siempre devuelve verdadero, que le dice a WebView que "nuestra implementación de WebViewClient maneja todo"; esto puede crear problemas para casos extremos de redirecciones, como usar 'location.replace()' en JavaScript . En lugar de 'view.loadUrl (url); return true; 'puede escribir' return false; 'para lograr el mismo efecto sin introducir errores. Vea mi explicación más larga en [esta respuesta a otra pregunta] (http://stackoverflow.com/a/14335335/241456) – daniel

1

Una forma más sencilla sería:

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

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

Cuestiones relacionadas