拼字檢查工具架構

Android 平台提供拼字檢查工具架構,可讓您在應用程式中實作和存取拼字檢查功能。這個架構為 Android 平台提供的其中一個文字服務 API。

如要在應用程式中使用這個架構,您必須建立特殊類型的 Android 服務,用來產生拼字檢查工具工作階段物件。這個工作階段物件會根據您提供的文字,傳回拼字檢查工具產生的拼字建議。

拼字檢查工具生命週期

下圖顯示拼字檢查工具服務的生命週期:

圖 1. 拼字檢查工具服務生命週期。

為了啟動拼字檢查功能,應用程式會先實作拼字檢查工具服務。應用程式中的用戶端 (例如活動或個別 UI 元素) 會向服務要求拼字檢查工具工作階段,然後使用這個工作階段取得文字建議。用戶端終止作業時,就會關閉拼字檢查工具工作階段。應用程式隨時可視需要關閉拼字檢查工具服務。

實作拼字檢查工具服務

如要在應用程式中使用拼字檢查工具架構,請新增拼字檢查工具服務元件,包括工作階段物件定義。您也可以在應用程式中加入用於控制設定的選用活動。此外,您還必須新增用於描述拼字檢查工具服務的 XML 中繼資料檔案,並在資訊清單檔案中加入適當元素。

拼字檢查工具類別

請使用下列類別定義服務和工作階段物件:

SpellCheckerService 的子類別
SpellCheckerService 會實作 Service 類別和拼字檢查工具架構介面。在子類別中,您必須實作以下方法:
createSession()
這個工廠方法會向要求進行拼字檢查的用戶端傳回 SpellCheckerService.Session 物件。

請參考拼字檢查工具服務範例應用程式,進一步瞭解如何實作這個類別。

SpellCheckerService.Session 的實作
拼字檢查工具服務會將這個物件提供給用戶端,讓用戶端將文字傳遞給拼字檢查工具並取得建議。在這個類別中,您必須實作以下方法:
onCreate()
系統會呼叫這個方法來回應 createSession()。在這個方法中,您可以根據目前的語言代碼等資訊初始化 SpellCheckerService.Session 物件。
onGetSentenceSuggestionsMultiple()
實際執行拼字檢查。這個方法會傳回 SentenceSuggestionsInfo 的陣列,當中會針對所傳遞的句子提供建議。

您可以視需要實作 onCancel() (處理拼字檢查取消要求)、onGetSuggestions() (處理字詞建議要求) 或 onGetSuggestionsMultiple() (處理批次字詞建議要求)。

請參考拼字檢查工具用戶端範例應用程式,進一步瞭解如何實作這個類別。

注意:實作拼字檢查功能時,請確保所有面向皆具有非同步和執行緒安全性質。不同核心上執行的不同執行緒可能會同步呼叫同一拼字檢查工具。SpellCheckerServiceSpellCheckerService.Session 會自動處理這項作業。

拼字檢查工具資訊清單和中繼資料

除了程式碼之外,您也必須為拼字檢查工具提供適當的資訊清單檔案和中繼資料檔案。

資訊清單檔案定義了應用程式、服務以及用於控制設定的活動,如以下程式碼片段所示:

<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 會自動使用拼字檢查工具,因此採用 TextView 檢視的應用程式可自動受惠於拼字檢查功能,如以下螢幕截圖所示:


圖 2. TextView 中的拼字檢查功能。

但在其他情況下,您也可能會想直接與拼字檢查工具服務互動。下圖顯示與拼字檢查工具服務互動的控制流程:

圖 3. 與拼字檢查工具服務互動。

Android 開放原始碼計畫中的 LatinIME 輸入法編輯器包含拼字檢查範例。