あなたのAndroidアプリケーションからGoogle翻訳を開く
このポストでは、プログラムを開いてGoogle翻訳を別のAndroidアプリケーションから翻訳し、テキストを翻訳する方法を示します.
例として、いくつかのテキストを表示し、「翻訳」ボタンを提供するスクリーンを使用します.
ソースコードは以下の通りです.
しかし、一部のユーザーがGoogle翻訳アプリケーションがインストールされていないことを覚えておくことが重要です.一部のユーザーはまた、そのデバイスに
番目のケースでは、Androidは次のダイアログを求めます
インストールされた意図を処理するアプリケーションがない場合、
Google翻訳がチェックされるならば、チェックしてください
Google翻訳がインストールされている場合にのみ、“翻訳”ボタンを表示するのもいいでしょう.次のコードを使用して、その存在を確認できます.
直接起動
我々はまた、-もしそれがインストールされている- Google翻訳は、関係なく、または意図して処理する他のアプリケーションがある場合は関係なく起動されます.
そのためには、次のコードを使用できます.
例として、いくつかのテキストを表示し、「翻訳」ボタンを提供するスクリーンを使用します.
ソースコードは以下の通りです.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
TranslateTestTheme {
MainScreen(
title = "Dog",
body = dogDescription,
onTranslateClick = { openGoogleTranslate(dogDescription) },
)
}
}
}
}
@Composable
private fun MainScreen(
title: String,
body: String,
onTranslateClick: () -> Unit,
) {
Scaffold(
topBar = {
TopAppBar(
title = { Text(text = title) },
actions = {
IconButton(onClick = onTranslateClick) {
Icon(Icons.Default.GTranslate, contentDescription = "Translate")
}
}
)
},
content = {
Text(
text = body,
style = MaterialTheme.typography.body2,
modifier = Modifier.padding(16.dp),
)
},
)
}
キー部分はコールバックに対応しています.onTranslateClick = { openGoogleTranslate(dogDescription) }
でGoogle翻訳を起動するIntent.ACTION_PROCESS_TEXT
の方法を見てみましょう.fun Context.openGoogleTranslate(text: String) {
val intent = Intent()
.setAction(Intent.ACTION_PROCESS_TEXT)
.setType("text/plain")
.putExtra(Intent.EXTRA_PROCESS_TEXT, text)
.putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, true)
startActivity(intent)
}
openGoogleTranslate
の意図的なフィルタに登録されているActivity
を開きます.Google翻訳アプリはそのようなIntent.ACTION_PROCESS_TEXT
を提供するように、それは言及されたメソッドが呼ばれるときに開かれる候補の一つです.しかし、一部のユーザーがGoogle翻訳アプリケーションがインストールされていないことを覚えておくことが重要です.一部のユーザーはまた、そのデバイスに
Activity
を処理するアプリケーションを持っています.番目のケースでは、Androidは次のダイアログを求めます
インストールされた意図を処理するアプリケーションがない場合、
Intent.ACTION_PROCESS_TEXT
の呼び出しでActivityNotFoundException
がスローされます.このケースはstartActivity
ブロックで扱うことができます.try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {
// TODO: Show error
}
Google翻訳がチェックされるならば、チェックしてください
Google翻訳がインストールされている場合にのみ、“翻訳”ボタンを表示するのもいいでしょう.次のコードを使用して、その存在を確認できます.
fun Context.queryProcessTextActivities(): List<ResolveInfo> {
val intent = Intent()
.setAction(Intent.ACTION_PROCESS_TEXT)
.setType("text/plain")
return packageManager.queryIntentActivities(intent, 0)
}
fun Context.isGoogleTranslateInstalled() = queryProcessTextActivities()
.any { it.activityInfo.packageName == "com.google.android.apps.translate" }
すべてのAndroidバージョンでtry/catch
を正しく動作させるには、次のフラグメントをqueryIntentActivities
に追加します.<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<application ...>
...
</application>
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT" />
<data android:mimeType="text/plain" />
</intent>
</queries>
</manifest>
直接起動
我々はまた、-もしそれがインストールされている- Google翻訳は、関係なく、または意図して処理する他のアプリケーションがある場合は関係なく起動されます.
そのためには、次のコードを使用できます.
fun Context.queryProcessTextActivities(): List<ResolveInfo> {
val intent = Intent()
.setAction(Intent.ACTION_PROCESS_TEXT)
.setType("text/plain")
return packageManager.queryIntentActivities(intent, 0)
}
fun Context.googleTranslateActivityInfo() = queryProcessTextActivities()
.firstOrNull { it.activityInfo.packageName == "com.google.android.apps.translate" }
?.activityInfo
fun Context.openGoogleTranslate(activity: ActivityInfo, text: String) {
val intent = Intent()
.setAction(Intent.ACTION_PROCESS_TEXT)
.setType("text/plain")
.putExtra(Intent.EXTRA_PROCESS_TEXT, text)
.putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, true)
// Following line makes sure only Google Translate app will be launched
.setClassName(activity.packageName, activity.name)
try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {
// TODO: Show error
}
}
このリンクの下に完全なKollinのコードを見つけることができますReference
この問題について(あなたのAndroidアプリケーションからGoogle翻訳を開く), 我々は、より多くの情報をここで見つけました https://dev.to/pchmielowski/opening-google-translate-from-your-android-application-55d8テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol