2011-02-08 15 views

Respuesta

7

Por lo que puedo decir, la aplicación Google Translate para Android no expone ningún estándar Intent que puedas usar (es una pena, pero es extraño al mismo tiempo. Podrías pensar que Google fomentaría este tipo de interacción entre aplicaciones ... de todos modos).

Sin embargo, parece que Google ha abierto la API de traducción a través de web service. De esta manera, puede hacer la traducción usted mismo y mostrarla en su aplicación. Es un poco más trabajo, pero debería hacer el trabajo.

Puede consultar google-api-translate-java si desea evitar escribir un envoltorio de API.

+1

Google Translate ahora es un servicio pago ... así que poder "llamar" al servicio de la aplicación de traducción sería bueno ... –

5

Tengo el mismo problema. Inicialmente, traté de utilizar Google Translate Ajax API, pero como Google ha dejado de utilizar la versión 1 de API y la versión 2 como servicio pago, mi código deja de funcionar. Luego, descompuse Google Translate App, busqué en el código Smali y obtuve alguna pista acerca de la lógica dentro de él. Utilice este código, que funciona para mí:

private void callGoogleTranslateApps(String word, String fromLang, String toLang) { 
    Intent i = new Intent(); 

    i.setAction(Intent.ACTION_VIEW); 
    i.putExtra("key_text_input", word); 
    i.putExtra("key_text_output", ""); 
    i.putExtra("key_language_from", fromLang); 
    i.putExtra("key_language_to", toLang); 
    i.putExtra("key_suggest_translation", ""); 
    i.putExtra("key_from_floating_window", false); 

    i.setComponent(new ComponentName("com.google.android.apps.translate", "com.google.android.apps.translate.TranslateActivity")); 
    startActivity(i); 
} 
+0

¡Gracias! ¿Hay alguna funcionalidad para hacer esto de forma silenciosa (es decir, sin iniciar la actividad de Google Translate)? Tal vez un proveedor de contenido? –

+0

No funciona en 4.0, básicamente el error dice "Causado por: java.lang.NullPointerException: uriString". ¿Alguna pista? – cnbuff410

6

Phi Van Ngoc answer fue fantástico, gracias por eso.

Sin embargo no funcionó inicialmente para mí y después de investigar el apk Traducir, parece que han modificado su estructura de archivo ligeramente, por lo que la intención ComponentName ahora debería ser:

i.setComponent(
    new ComponentName(
     "com.google.android.apps.translate", 
     "com.google.android.apps.translate.translation.TranslateActivity")); 

La diferencia es que la "traducción" se ha añadido antes "TranslateActivity"

Así que mi versión final, incluida la traducción modificable del español al Inglés, es:

Intent i = new Intent(); 
i.setAction(Intent.ACTION_VIEW); 
i.putExtra("key_text_input", "Me gusta la cerveza"); 
i.putExtra("key_text_output", ""); 
i.putExtra("key_language_from", "es"); 
i.putExtra("key_language_to", "en"); 
i.putExtra("key_suggest_translation", ""); 
i.putExtra("key_from_floating_window", false); 
i.setComponent(
    new ComponentName(
     "com.google.android.apps.translate", 
     "com.google.android.apps.translate.translation.TranslateActivity")); 
startActivity(i); 
+1

Supongo que no hay forma de recuperar el texto traducido del Intento, ¿correcto? – littleK

2

Para añadir las respuestas anteriores:

es importante que se pasa de dos letras códigos de idioma. Con los códigos de 3 letras, puede parecer que la aplicación de traducción de google no recibe ningún dato.

Además, si Intent.ACTION_VIEW no funciona, puede usar Intent.ACTION_SEND.

 intent = new Intent(); 
     //intent.setAction(Intent.ACTION_VIEW); // this did not work for me initially 
     intent.setAction(Intent.ACTION_SEND); 
     intent.putExtra(Intent.EXTRA_TEXT, m_text); 
     intent.putExtra("key_text_input", m_text); 
     intent.putExtra("key_text_output", ""); 
     intent.putExtra("key_language_from", m_language); 
     intent.putExtra("key_language_to", lang_to); 
     intent.putExtra("key_suggest_translation", ""); 
     intent.putExtra("key_from_floating_window", false); 
     intent.setComponent(
      new ComponentName(
       "com.google.android.apps.translate", 
       "com.google.android.apps.translate.HomeActivity" 
       )); 
    //try { 
     startActivityForResult(intent, REQUEST_CODE_TRANSLATE); 
    //... 
4

OMG! ¡Lo han cambiado una vez más! Lo han hecho parecer más razonable, pero no compatible con la versión anterior.

Intent i = new Intent(); 
i.setAction(Intent.ACTION_SEND); 
i.putExtra(Intent.EXTRA_TEXT, "What is going on?"); 
i.putExtra("key_text_input", "Oh my God!"); 
i.putExtra("from", "en"); 
i.putExtra("to", "zh-CN"); 
i.setComponent(new ComponentName("com.google.android.apps.translate", 
       "com.google.android.apps.translate.HomeActivity")); 

Parece que este es un intento SEND con dos (BTW, opcional) parámetros adicionales, "a" y "De".

Hay un gotcha: "key_text_input" tiene preferencia sobre Intent.EXTRA_TEXT, y "a" y "de" solo funcionan con "key_text_input".

Para las personas que cambian la API con cada nueva versión, puede parecer razonable cambiar el nombre de "key_text_input" por decir, simplemente "text_input", por lo que esperamos la próxima versión ...

Para estar en el lado seguro, propongo establecer tanto Intent.EXTRA_TEXT como "key_text_input" con el mismo valor.

Cuestiones relacionadas