Как использовать приложение Google Переводчик - PullRequest
9 голосов
/ 08 февраля 2011

Я запрограммировал программу о словарном предложении, и я хочу, чтобы в моем приложении была функция перехода к приложению "google translation"

Как я могу использовать это, Должен ли я импортировать что-нибудь?

Ответы [ 5 ]

7 голосов
/ 08 февраля 2011

Из того, что я могу сказать, приложение Google Translate для Android не предоставляет никаких стандартных Intent s, которые вы могли бы использовать (это жалко, но в то же время странно. Вы могли бы подумать, что Google будет поощрять этот типвзаимодействие между приложениями .. в любом случае).

Однако, похоже, Google открыл API перевода с помощью веб-службы .Таким образом, вы можете сделать перевод самостоятельно и показать его в своем приложении.Это немного больше работы, но она должна делать эту работу.

Вы можете посмотреть на google-api-translate-java , если хотите избавиться от написания оболочки API.

6 голосов
/ 27 июня 2012

Ответ Пхи Ван Нгока был фантастическим, спасибо за это.

Однако изначально он не сработал для меня, и после изучения apk Translate, похоже, они изменили своиструктура файла немного, поэтому намерение ComponentName теперь должно быть:

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

Разница в том, что «перевод» был добавлен до «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);
6 голосов
/ 29 января 2012

У меня такая же проблема. Сначала я пытался использовать 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);
}
5 голосов
/ 04 октября 2013

OMG! Они изменили это еще раз! Они сделали его более разумным, но не совместимым с предыдущей версией.

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, а "to" и "from" работают только с "key_text_input".

Для людей, которые меняют API с каждой новой версией, может показаться разумным переименовать «key_text_input», скажем, просто «text_input», поэтому мы с нетерпением ждем следующего выпуска ...

Чтобы быть в безопасности, я бы предложил установить оба значения Intent.EXTRA_TEXT и "key_text_input" в одно и то же значение.

2 голосов
/ 05 сентября 2013

Чтобы добавить ответы выше:

важно, чтобы вы передавали двухбуквенные языковые коды. При использовании трехбуквенных кодов может показаться, что приложение 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);
    //...
...