Quick Search Boxを利用する

Android端末にデフォルトでインストールされていQuick Search Boxに対応したアプリを作る。

完成品は、「クイック英語検索」としてAndroid Marketに公開中です。

 

1. Searchable Configurationの作成

./res/xml/searchable.xmlを作成し、以下を記載。
<?xml version="1.0" encoding="utf-8"?>

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
	android:label="@string/app_name"
	android:hint="@string/search_hint"
	android:includeInGlobalSearch="true" → Quick Search Boxから利用できるようになる
	android:searchSettingsDescription="@string/search_contents"
	android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" > → 音声検索の利用
</searchable>

2. Searchable Actibityの作成

AndroidManifest.xmlに以下のようなActivityを新規作成。

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

        ...

        <activity
            android:name=".ui.SearchDictionaryActivity"
            android:excludeFromRecents="true" → オプション。最近使ったアプリ一覧に残さない。
            android:noHistory="true" → オプション。履歴に残さない。(戻るボタンで戻ってこない)
            android:theme="@android:style/Theme.Translucent.NoTitleBar" > → オプション。透明なActivity
            <intent-filter >
                <action android:name="android.intent.action.SEARCH" /> → これが必要。
            </intent-filter>
            <meta-data android:resource="@xml/searchable" android:name="android.app.searchable"/> → これも必要。
        </activity>

        ...

        </application>

3. 検索クエリーを受け取るActivityを作成

今回は、クエリーを受け取ったら、ブラウザを起動して「英辞郎」で検索する。

public class SearchDictionaryActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		boolean result = false;

		Intent intent = getIntent(); → 検索Intent
		String action = null;
		String query = null;
		if (intent != null) {
			action = intent.getAction();
		}
		if (action != null) {
			if (action.equals(Intent.ACTION_SEARCH)) { → Actionが検索か確認
				query = intent.getStringExtra(SearchManager.QUERY); → 検索クエリー(ワード)を取得
			}
		}
		if (query != null) {
			try {
				String word = URLEncoder.encode(query, "UTF-8"); → UTF-8でURLエンコード
				Intent launchIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://eow.alc.co.jp/" + word + "/UTF-8/?ref=sa")); → 英辞郎で検索
				launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				startActivity(launchIntent);
				result = true;
			} catch (Exception e) {

			}
		}

		if (!result) {
			Toast.makeText(getApplicationContext(), R.string.failed_to_search, Toast.LENGTH_SHORT);
		}

		finish();
	}
}

 

■メモ

Quick Search Boxに音声検索機能を追加するため、

searchable.xml
android:voiceSearchModeにshowVoiceSearchButton|launchRecognizer

を設定しても、最初の一回しか音声認識結果がアプリに渡されない。frameworkの不具合では、、

Quick Search Boxを利用する” への1件のコメント

コメントは受け付けていません。