こんにちは。当社で2年目を迎えた@knagauchiです。
この記事は弊社の Advent Calender 2019 の 3 日目の記事です。
前日の@irisTa56さんはかなり詳細に書いてくれていますね😁
本日は私が興味あって調べたことのTips的な内容です。短いです。
調べたきっかけ
前回は英語生活中でしたが、来年上海に行く用事ができたので、英語と同時並行で中国語を学び始めました。
とても便利な英中辞書アプリPlecoを使っています。
このようにPlecoには、ブラウザで長押し選択した文字列を翻訳する機能があります。
Google翻訳もそうですよね。
これ、Google以外のアプリでも出来ることを知らなかったので、技術的にどうやって実現するんだろう?と思って調べました。
とても簡単でしたが、Qiitaには載っていなかったので、紹介します。
実装方法
<activity android:name=".view.ProcessTextActivity"
android:label="@string/process_text_name">
<intent-filter>
<action android:name="android.intent.action.PROCESS_TEXT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
class ProcessTextActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val text = intent.getCharSequenceExtra(Intent.EXTRA_PROCESS_TEXT)?.toString()
// textを使う
}
}
これだけです。
動作
実際に動作を見てみましょう。
`android:label`で設定した文字列がメニューに表示されるようです。「**もらった!**」が、設定した文字列 選択した文字列がアプリで受け取れました。補足
Intent.EXTRA_PROCESS_TEXT
の部分が黄色いのは、minSdkVersion
を23未満にしているからです
EXTRA_PROCESS_TEXTはAndroid 6.0以上で有効なフラグのようですね。
Google Chrome以外に、SlackやLINEのメッセージ入力欄など、文字列選択ができる多くのアプリに対応できます。
もっと詳しく
以下の記事が参考になります(英語)
Creating custom Text Selection actions with ACTION_PROCESS_TEXT
次回は@keigo1450さんの投稿です。お楽しみに!🤗