Android M(6.0)以降では、Google翻訳をインストールすると、ブラウザ等のアプリのコンテキストメニューに"翻訳"が現れ、選択したテキストの翻訳を行うことができる。同様に、MDict等の辞書アプリをインストールすると、コンテキストメニューに辞書アプリ名が表示され、選択したテキストで辞書引きができる。
「EBPocketでは対応しないのか」と海外のユーザからの問い合わせがあったので、調査したところ簡単に対応できそうなので実装してみた。Android M以降にEBPocketをインストールすると、次のようにコンテキストメニューにEBPocketが登録される。
実装方法は下記の通り。
1.AndroidManfest.xmlにaction.PROCESS_TEXTのインテントフィルターを追加する。これで他アプリのコンテキストメニューにアプリ名が表示される。
<intent-filter> <action android:name="android.intent.action.PROCESS_TEXT" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter>
2.ACTION_PROCESS_TEXTのハンドラを作成する
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 。。。 handleIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { // android:launchMode="singleTop" にした場合、 // 2回目以降のActivityの呼び出しで呼ばれる handleIntent(intent); } private void handleIntent(Intent intent) { String queryAction = intent.getAction(); if (Intent.ACTION_SEARCH.equals(queryAction)) { // handles a search query String queryString = intent.getStringExtra(SearchManager.QUERY); // queryStringで検索 } else if (Intent.ACTION_PROCESS_TEXT.equals(queryAction)) { Bundle extras = intent.getExtras(); if (extras != null) { CharSequence ext = extras.getCharSequence(Intent.EXTRA_PROCESS_TEXT); if (ext != null) { String queryString = (String) ext; // queryStringで検索 } } } }
参考になる記事: