Google翻译活动不再有效

时间:2013-10-02 08:01:26

标签: android android-intent google-translate

我编写了一个程序,通过Intent.ACTION_VIEW调用Google Translator android应用程序。 问题是,调用Google Translator App不再有效,尽管它只执行过一次。

代码与此处给出的代码相同:

Returning Translated Text from Google Translate Activity

(是的,我尝试用该代码替换我的代码,Google Translator App的行为就像它没有收到任何数据一样。)

目前我无法指定文字和两种语言。我能做的最好的事情就是使用ACTION_SEND,但忽略了两种语言:

        Intent i = new Intent();
        i.setAction(Intent.ACTION_SEND);
        i.putExtra(Intent.EXTRA_TEXT, "What is going on?");
        i.putExtra("key_text_input", "What time is it?");
        i.putExtra("key_text_output", "");
        i.putExtra("key_language_from", "en");
        i.putExtra("key_language_to", "es");
        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"));

我运行此代码时实际发生的事情是:Google Translator问我是否要翻译英文并翻译“发生了什么事?”法语。

那么:我现在如何将语言传递给Google翻译应用程序?

3 个答案:

答案 0 :(得分:9)

他们再次改变了它:

            intent.setAction(Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.setPackage("com.google.android.apps.translate");

            intent.putExtra(Intent.EXTRA_TEXT, text);

更新:如果您将文本和语言打包到URI中, 可以传递语言:

            intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setPackage("com.google.android.apps.translate");

            Uri uri = new Uri.Builder()
                    .scheme("http")
                    .authority("translate.google.com")
                    .path("/m/translate")
                    .appendQueryParameter("q", "c'est l'meunier Mathurin qui caresse les filles au tic-tac du moulin")
                    .appendQueryParameter("tl", "pl") // target language
                    .appendQueryParameter("sl", "fr") // source language
                    .build();
            //intent.setType("text/plain"); //not needed, but possible
            intent.setData(uri);

答案 1 :(得分:1)

更新:

以下代码适用于新版Google翻译应用程序:

        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! What is going on here?");
        //i.putExtra("key_text_output", "");
        i.putExtra("from", "en");
        i.putExtra("to", "zh-CN");
        //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.HomeActivity"));

如您所见,这是标准的ACTION_SEND,附加参数为“to”和“from”。

有一个问题:“key_text_input”优先于Intent.EXTRA_TEXT,“to”和“from”只能使用“key_text_input”。

如果您的印象是没有数据传递(根本没有),可能是因为您使用3个字符的语言代码而不是2个字符的语言代码。但是中文的代码是zh-CN和zh-TW。

我以前的帖子:

操作和参数名称已更改。

        Intent i = new Intent();
        i.setAction("com.google.android.apps.translate.action.QUERY");
        i.putExtra("key_text_input", "Oh my God! What is going on?");
        i.putExtra("key_text_output", "");
        i.putExtra("from", "en");
        i.putExtra("to", "zh-CN");
        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"));

答案 2 :(得分:0)

其他答案会将 Google 翻译应用作为全屏活动打开。我想将它作为我当前应用上方的浮动窗口打开。

事实证明,您可以使用“android.intent.action.PROCESS_TEXT”的 Intent 操作来执行此操作,例如

translateIntent.setComponent(new ComponentName(
    "com.google.android.apps.translate",
    "com.google.android.apps.translate.QuickTranslateActivity"
));
translateIntent.setAction(Intent.ACTION_PROCESS_TEXT);
translateIntent.putExtra(Intent.EXTRA_PROCESS_TEXT, textToTranslate);

注意:我实际上并没有使用这个方法,因为我使用 onActionStarted 拉取了系统上下文菜单的意图,但我为你嗅探了这个意图,所以我不明白为什么如果手动创建这将不起作用。