hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

Android コンテキストメニューへのEBPocketの登録と検索

Android M(6.0)以降では、Google翻訳をインストールすると、ブラウザ等のアプリのコンテキストメニューに"翻訳"が現れ、選択したテキストの翻訳を行うことができる。同様に、MDict等の辞書アプリをインストールすると、コンテキストメニューに辞書アプリ名が表示され、選択したテキストで辞書引きができる。
「EBPocketでは対応しないのか」と海外のユーザからの問い合わせがあったので、調査したところ簡単に対応できそうなので実装してみた。Android M以降にEBPocketをインストールすると、次のようにコンテキストメニューにEBPocketが登録される。

f:id:hishida:20191016081031p:plain

実装方法は下記の通り。

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で検索
			}
		}
	}
}

参考になる記事:

medium.com