Фреймворк проверки правописания

Платформа Android предлагает фреймворк проверки правописания, который позволяет реализовать и получить доступ к проверке правописания в вашем приложении. Фреймворк является одним из API текстовых сервисов.

Чтобы использовать фреймворк в приложении, создайте сервис Android, который генерирует объект сеанса проверки правописания. На основе предоставленного вами текста объект сеанса возвращает исправления правописания, сгенерированные средством проверки правописания.

Жизненный цикл проверки правописания

На следующей диаграмме показан жизненный цикл сервиса проверки правописания:

Изображение, на котором показан жизненный цикл сервиса проверки правописания
Рисунок 1. Жизненный цикл сервиса проверки правописания.

Чтобы запустить проверку правописания, приложение запускает реализацию сервиса проверки правописания. Клиенты в вашем приложении, такие как действия или отдельные элементы пользовательского интерфейса, запрашивают у сервиса сеанс проверки правописания, а затем используют его для получения предложений по тексту. Когда клиент завершает работу, он закрывает сеанс проверки правописания. При необходимости приложение может в любой момент отключить сервис проверки правописания.

Как реализовать сервис проверки правописания

Чтобы использовать фреймворк проверки правописания в приложении, добавьте компонент сервиса проверки правописания, который включает определение объекта сеанса. Вы также можете добавить в приложение необязательное действие, которое управляет настройками. Добавьте 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. Взаимодействие с сервисом проверки правописания.

Пример проверки правописания можно найти в редакторе метода ввода LatinIME в Android Open Source Project.