我编写了一个程序,通过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翻译应用程序?
答案 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 拉取了系统上下文菜单的意图,但我为你嗅探了这个意图,所以我不明白为什么如果手动创建这将不起作用。>