5 ответов:
Из того, что я могу сказать, приложение Google Translate для Android не предоставляет никаких стандартных
Intents, которые вы могли бы использовать (это жалко, но в то же время странно. Можно подумать, что Google поощряет такой тип взаимодействия между приложениями.. в любом случае).Однако, похоже, Google открыл API translate через веб-сервис . Таким образом, вы можете сделать перевод самостоятельно и показать его в своем приложении. Это немного больше работы, но она должна делать свою работу.
Вы можете посмотреть на google-api-translate-java Если вы хотите избавить себя от написания оболочки API.
Ответ Фи Ван Нгока был фантастическим, спасибо за это.
Однако это не сработало изначально для меня, и после изучения Translate apk, похоже, что они немного изменили свою файловую структуру, поэтому имя компонента intent теперь должно быть:
i.setComponent( new ComponentName( "com.google.android.apps.translate", "com.google.android.apps.translate.translation.TranslateActivity"));Разница в том, что "translation" был добавлен перед "TranslateActivity"
Таким образом, моя окончательная версия, включая жесткий перевод с испанского на английский, выглядит следующим образом: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);
У меня та же проблема. Изначально я пытался использовать Google Translate Ajax API, но так как Google устарел API версии 1 и сделал версию 2 платной услугой, мой код перестает работать. Затем я декомпилировал приложение Google Translate, заглянул в код Smali и получил некоторые подсказки о логике внутри него. Используйте этот код, он работает для меня:
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); }
ОМГ! Они снова изменили его! Они сделали его более разумным, но не совместимым с предыдущей версией.
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"));Похоже, что это намерение отправки с двумя дополнительными (кстати, необязательными) параметрами "to"и " from".
Тут есть одна загвоздка:" key_text_input " отдает предпочтение перед Intent.EXTRA_TEXT, а "в" и "с" работают только с "key_text_input".
Для людей, которые меняют API с каждой новой версией, может показаться разумным переименовать его "key_text_input", скажем, просто "text_input", поэтому мы будем с нетерпением ждать следующего релиза...
Чтобы быть в безопасности, я бы предложил установить оба намерения.EXTRA_TEXT и "key_text_input" к одному и тому же значению.
Добавить следующие ответы:
Важно, чтобы вы прошли две буквы коды языков. С 3-буквенными кодами это может выглядеть так, как будто приложение google translate не получает никаких данных.
Кроме того, если
Intent.ACTION_VIEWне работает, вы можете использовать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); //...
Comments