スペルチェック フレームワーク

Android プラットフォームには、アプリにスペルチェックを実装してアクセスできるようにするスペルチェック フレームワークが用意されています。このフレームワークは、テキスト サービス API の 1 つです。

アプリでこのフレームワークを使用するには、スペルチェック session オブジェクトを生成する Android サービスを作成します。セッション オブジェクトは、入力したテキストに基づいて、スペルチェックで生成されたスペル候補を返します。

スペルチェックのライフサイクル

次の図は、スペルチェック サービスのライフサイクルを示しています。

スペルチェック サービスのライフサイクルを示す画像
図 1. スペル チェッカー サービスのライフサイクル。

スペルチェックを開始するには、アプリがスペルチェック サービスの実装を開始します。アクティビティや個々の UI 要素など、アプリ内のクライアントがスペル チェッカー セッションをサービスにリクエストし、そのセッションを使用してテキストの候補を取得します。クライアントはそのオペレーションを終了すると、スペルチェック セッションを閉じます。アプリは必要に応じて、いつでもスペルチェック サービスをシャットダウンできます。

スペルチェック サービスを実装する

アプリでスペル チェッカー フレームワークを使用するには、セッション オブジェクト定義を含むスペル チェッカー サービス コンポーネントを追加します。また、設定を管理するオプションのアクティビティをアプリに追加することもできます。スペルチェック サービスを記述する XML メタデータ ファイルを追加し、マニフェスト ファイルに適切な要素を追加します。

スペルチェック クラス

次のクラスを使用してサービス オブジェクトとセッション オブジェクトを定義します。

  • SpellCheckerService のサブクラス
    SpellCheckerService は、Service クラスとスペル チェッカー フレームワーク インターフェースの両方を実装します。サブクラス内で、次のメソッドを実装します。
    createSession()
    スペルチェックを行うクライアントに SpellCheckerService.Session オブジェクトを返すファクトリ メソッド。
  • SpellCheckerService.Session の実装
    スペルチェック サービスがクライアントに提供するオブジェクト。クライアントは、オブジェクトをスペル チェッカーに渡し、候補を受け取ります。このクラス内で、次のメソッドを実装します。
    onCreate()
    createSession() に応じて、システムによって呼び出されます。このメソッドでは、現在の言語 / 地域やその他の詳細情報に基づいて、SpellCheckerService.Session オブジェクトを初期化できます。
    onGetSentenceSuggestionsMultiple()
    実際のスペルチェックを行います。このメソッドは、渡された文の候補を含む SentenceSuggestionsInfo の配列を返します。

    必要に応じて、スペルチェックのキャンセル リクエストを処理する onCancel()、単語の候補リクエストを処理する onGetSuggestions()、または単語の候補のバッチ リクエストを処理する onGetSuggestionsMultiple() を実装できます。

スペルチェックのマニフェストとメタデータ

コードに加えて、スペル チェッカーの適切なマニフェスト ファイルとメタデータ ファイルも提供します。

次の例に示すように、マニフェスト ファイルは、設定を制御するためのアプリ、サービス、アクティビティを定義します。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.samplespellcheckerservice" >
    <application
        android:label="@string/app_name" >
        <service
            android:label="@string/app_name"
            android:name=".SampleSpellCheckerService"
            android:permission="android.permission.BIND_TEXT_SERVICE" >
            <intent-filter >
                <action android:name="android.service.textservice.SpellCheckerService" />
            </intent-filter>

            <meta-data
                android:name="android.view.textservice.scs"
                android:resource="@xml/spellchecker" />
        </service>

        <activity
            android:label="@string/sample_settings"
            android:name="SpellCheckerSettingsActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>
    </application>
</manifest>

システムのみがサービスにバインドするように、サービスを使用するコンポーネントは BIND_TEXT_SERVICE 権限をリクエストする必要があります。サービスの定義では、spellchecker.xml メタデータ ファイルも指定しています。これについては、次のセクションで説明します。

メタデータ ファイル spellchecker.xml には、次の XML が含まれています。

<spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
        android:label="@string/spellchecker_name"
        android:settingsActivity="com.example.SpellCheckerSettingsActivity">
    <subtype
            android:label="@string/subtype_generic"
            android:subtypeLocale="en”
    />
    <subtype
            android:label="@string/subtype_generic"
            android:subtypeLocale="fr”
    />
</spell-checker>

メタデータでは、スペルチェックが設定の制御に使用するアクティビティを指定します。また、スペルチェックのサブタイプも定義します。この場合、サブタイプによって、スペルチェックが処理できるロケールが定義されます。

クライアントからスペルチェック サービスにアクセスする

TextView ビューと EditText ビューを使用するアプリでは、TextView が自動的にスペルチェックを使用するため、スペルチェックが自動的に適用されます。

EditText でスペル チェッカーが自動的に有効になる仕組みを示す画像
図 2. EditText でのスペルチェック。

ただし、それ以外のケースでは、スペルチェック サービスを直接操作する必要があります。次の図は、スペルチェック サービスを操作するための制御フローを示しています。

スペルチェック サービスとのやり取りの図を示す画像
図 3. スペルチェック サービスとのインタラクション。

Android オープンソース プロジェクトの LatinIME インプット メソッド エディタに、スペルチェックの例が含まれています。