Android コンテキストメニューへのEBPocketの登録と検索
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で検索
}
}
}
}
参考になる記事: