辞書文に関するプログラムをコーディングしましたが、アプリで「グーグル翻訳」アプリケーションに移動する機能が欲しいです。
どうすれば使用できますか、何かをインポートする必要がありますか?
辞書文に関するプログラムをコーディングしましたが、アプリで「グーグル翻訳」アプリケーションに移動する機能が欲しいです。
どうすれば使用できますか、何かをインポートする必要がありますか?
私の知る限り、Google Translate Androidアプリは、使用できる標準Intent
を公開していません(これはちょっとしたことですが、同時に奇妙です。Googleは、この種のアプリ間の相互作用を奨励すると思います。とにかく。 )。
ただし、GoogleはWebサービスを介して翻訳APIを公開しているようです。このようにして、自分で翻訳を行い、アプリ内に表示することができます。もう少し手間がかかりますが、うまくいくはずです。
APIラッパーを作成する手間を省きたい場合は、google-api-translate-javaを参照してください。
私も同じ問題を抱えてる。最初はGoogle翻訳AjaxAPIを使おうとしましたが、GoogleがAPIバージョン1を廃止し、バージョン2を有料サービスにしたため、コードが機能しなくなりました。次に、Google翻訳アプリを逆コンパイルし、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);
}
Phi Van Ngocの答えは素晴らしかった、ありがとう。
ただし、最初は機能しませんでした。Translateapkを調査した後、ファイル構造がわずかに変更されたように見えるため、インテントComponentNameは次のようになります。
i.setComponent(
new ComponentName(
"com.google.android.apps.translate",
"com.google.android.apps.translate.translation.TranslateActivity"));
違いは、「TranslateActivity」の前に「translation」が追加されていることです。
したがって、スペイン語から英語へのハードコードされた翻訳を含む私の最終バージョンは次のとおりです。
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);
ああ、神様!彼らはもう一度それを変えました!彼らはそれをより合理的に見せましたが、以前のバージョンとは互換性がありません。
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」の2つの追加(BTW、オプション)パラメーターを持つSENDインテントのようです。
落とし穴があります。「key_text_input」はIntent.EXTRA_TEXTよりも優先され、「to」と「from」は「key_text_input」でのみ機能します。
新しいバージョンごとにAPIを変更する人にとっては、「key_text_input」の名前を「text_input」などに変更するのが妥当と思われるかもしれません。次のリリースを楽しみにしています...
安全のために、Intent.EXTRA_TEXTと"key_text_input"の両方を同じ値に設定することをお勧めします。
Google翻訳のアクティビティ名は時間の経過とともに変化する傾向があるため、ハードコーディングするとコードが壊れやすくなります。
これは、現在のバージョンのgoogle translateで機能し、将来のアップデートでも機能し続ける可能性が高いアプローチです(パッケージ名が同じである限り)。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
for (ResolveInfo resolveInfo : getPackageManager().queryIntentActivities(new Intent().setAction(Intent.ACTION_PROCESS_TEXT).setType("text/plain"), 0)) {
if (resolveInfo.activityInfo.packageName.equals("com.google.android.apps.translate")) {
String activityName = resolveInfo.activityInfo.name;
String packageName = resolveInfo.activityInfo.packageName;
Intent intent = new Intent().setPackage(packageName)
.setClassName(packageName, activityName)
.setAction(Intent.ACTION_PROCESS_TEXT)
.setType("text/plain")
.putExtra(Intent.EXTRA_PROCESS_TEXT, "Nobody expects the Spanish Inquisition!")
.putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, true);
startActivity(intent);
}
}
} else {
// >>> deprecated code from other answers goes here <<<
}
上記の回答を追加するには:
2文字の言語コードを渡すことが重要です。3文字のコードでは、Google翻訳アプリがデータを受信していないように見える場合があります。
また、動作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);
//...