2011-08-29 29 views
6

Soy nuevo en Android y Java. He construido una aplicación usando HTML/Javascript que funciona muy bien.Android - Cómo ejecutar el intento desde JavaScript

Ahora necesito crear una actividad que inicie el cliente de correo electrónico, rellene el asunto y el cuerpo, y (la parte difícil) agrega un archivo adjunto. No he podido hacer esto desde JavaScript, mailto: no adjuntará el archivo.

Así que tengo que lograr esto a través de Java y ejecutarlo desde JavaScript. Creo que esto se puede hacer usando addJavaScriptInterface, pero no puedo encontrar ninguna documentación detallada o ejemplos para desaprovechar.

¿Cómo podría hacer esto?

Esto es lo que tengo hasta ahora después de leer la documentación:

segunda actualización de código:

MainActivity.java

public class MainActivity extends DroidGap { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.setIntegerProperty("splashscreen", R.drawable.splash); 
    super.loadUrl("file:///android_asset/www/index.html", 1000); 
    WebView mWebView; 
    mWebView = (WebView)findViewById(R.id.webview); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.addJavascriptInterface(new JavaScriptInterface(), "Android"); 
} 
} 

JavaScriptInterface.java

public class JavaScriptInterface { 

public void doEmail(){ 
    Intent sendIntent = new Intent(Intent.ACTION_SEND); 
    sendIntent.setType("text/html"); 
    sendIntent.putExtra(android.content.Intent.EXTRA_TEXT,"test text"); 
    sendIntent.putExtra(Intent.EXTRA_SUBJECT,"test subject"); 
    sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://test co.html")); 
    startActivity(Intent.createChooser(sendIntent, "Send email...")); 
    } 
} 

Entonces Haría referencia al intento a través de JavaScript usando Android.doEmail() .

Con el código anterior que estoy recibiendo 2 errores en Eclipse 1. El método startActivity (Intención) no está definido para el tipo - JavaScriptInterface 2. WebView no se puede resolver o no es un campo - MainActivity

Lo estoy haciendo mal?

Respuesta

4
public class MainActivity extends DroidGap { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.setIntegerProperty("splashscreen", R.drawable.splash); 

     JavaScriptInterface jsi = new JavaScriptInterface(this, appView); 
     appView.addJavascriptInterface(jsi, "Android"); 

     super.loadUrl("file:///android_asset/www/index.html", 1000); 
    } 
} 

y

public class JavaScriptInterface { 
    private WebView mAppView; 
    private DroidGap mGap 

    public JavaScriptInterface (DroidGap gap, WebView view) 
    { 
     mAppView = view; 
     mGap = gap; 
    } 

    public void doEmail(){ 
     Intent sendIntent = new Intent(Intent.ACTION_SEND); 
     sendIntent.setType("text/html"); 
     sendIntent.putExtra(android.content.Intent.EXTRA_TEXT,"test text"); 
     sendIntent.putExtra(Intent.EXTRA_SUBJECT,"test subject"); 
     sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     sendIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("file://test co.html")); 
     startActivity(Intent.createChooser(sendIntent, "Send email...")); 
    } 
} 
+0

Ya tengo una 'MainActivity'. ¿Incluiría las otras cosas aquí? 'public class MainActivity extends DroidGap {/ ** Se llama cuando la actividad se crea por primera vez. */@Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); super.setIntegerProperty ("splashscreen", R.drawable.splash); super.loadUrl ("file: ///android_asset/www/index.html", 1000); }} ' – user899641

+0

Lo siento, no sé cómo hacer el código limpio como el anterior ... – user899641

+0

http://stackoverflow.com/questions/2727763/communication-between-android-java-and-phonegap-javascript – adamcodes

2

El uso de addJavaScriptInterface extenderá el DOM dentro del navegador incrustado y permitirá a JS acceder a un objeto Java, que es exactamente lo que usted desea.

Hay demasiados pasos para describir aquí, que ya se han documentado. Este link tiene una buena visión general.

+0

He editado mi pregunta e incluido lo que tengo hasta ahora. ¿Puedes decirme qué estoy haciendo mal? – user899641

6

This documentation le indica exactamente cómo hacerlo.

Parece que hay tres pasos principales:

  1. Crear su clase de 'interfaz' en Android
  2. Añadir una instancia de esta 'interfaz' a la WebView que está utilizando.
  3. Llame a la interfaz desde su JavaScript.
+0

Ok, edité mi pregunta e incluí lo que tengo hasta ahora. ¿Puedes decirme qué estoy haciendo mal? – user899641

+0

Su clase 'JavaScriptInterface' no debe extender' Activity'. Será su propia clase que tenga un método 'send()'. Su clase 'Activity' debe hacer la segunda parte de sus códigos' send() 'método (la porción' WebView') –

+0

@ nicholas.hauschild Yo sigo la misma documentación pero brindé un mensaje no fire por qué. – NagarjunaReddy

0

utilicé intentos web de Boris Smus (http://smus.com/android-phonegap-plugins) y funciona como un encanto. También puede leer su código un poco para comprender mejor el enfoque que tomó con los complementos.

NOTA: es necesario actualizar el código provisto un poco (ver comentarios) y la arquitectura del complemento ha cambiado un poco.

Cuestiones relacionadas