拼写检查工具框架

Android 平台提供了拼写检查工具框架,可让您在应用中实现和使用拼写检查功能。该框架是 Android 平台提供的文本服务 API 之一。

如需在您的应用中使用该框架,您需要创建一个特殊类型的 Android 服务,该服务可生成拼写检查工具会话对象。根据您提供的文本,该会话对象会返回拼写检查工具生成的拼写建议。

拼写检查工具生命周期

下图显示了拼写检查工具服务的生命周期:

图 1. 拼写检查工具服务的生命周期。

如需启动拼写检查,您的应用会开始实现拼写检查工具服务。您应用中的客户端(例如,Activity 或各个界面元素)会从该服务请求拼写检查工具会话,然后使用该会话获取文本建议。当客户端终止其操作时,它会关闭其拼写检查工具会话。如有必要,您的应用可随时关闭拼写检查工具服务。

实现拼写检查工具服务

如需在您的应用中使用拼写检查工具框架,请添加包含会话对象定义的拼写检查工具服务组件。您还可以向应用添加可控制设置的可选 Activity。此外,您还必须添加描述拼写检查工具服务的 XML 元数据文件,并向清单文件添加适当的元素。

拼写检查工具类

使用以下类定义服务和会话对象:

SpellCheckerService 的子类
SpellCheckerService 会同时实现 Service 类和拼写检查工具框架接口。在子类中,您必须实现以下方法:
createSession()
一种工厂方法,用于将 SpellCheckerService.Session 对象返回到想要执行拼写检查的客户端。

如需详细了解如何实现此类,请查看拼写检查工具服务示例应用。

SpellCheckerService.Session 的实现
拼写检查工具服务提供给客户端,使客户端能够将文本传递给拼写检查工具并接收建议的对象。在此类中,您必须实现以下方法:
onCreate()
由系统调用以响应 createSession()。在此方法中,您可以根据当前语言区域等信息来初始化 SpellCheckerService.Session 对象。
onGetSentenceSuggestionsMultiple()
执行实际的拼写检查。此方法返回一个 SentenceSuggestionsInfo 数组,其中包含针对传递给它的句子的建议。

(可选)您可以实现 onCancel()(它可处理请求以取消拼写检查)、onGetSuggestions()(它可处理文字建议请求)或 onGetSuggestionsMultiple()(它可批量处理文字建议请求)。

如需详细了解如何实现此类,请查看拼写检查工具客户端示例应用。

注意:您必须以异步和线程安全的方式实现拼写检查的所有方面。拼写检查工具可以由在不同核心上运行的不同线程同时调用。SpellCheckerServiceSpellCheckerService.Session 会自动执行该操作。

拼写检查工具清单和元数据

除了代码之外,您还需要为拼写检查工具提供适当的清单文件和元数据文件。

相应的清单文件定义了用于控制设置的应用、服务和 Activity,如以下代码段所示:

<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>

上述元数据指定了拼写检查工具用于控制设置的 Activity。它还定义了拼写检查工具的子类型;在本示例中,相应的子类型定义了拼写检查工具可以处理的语言区域。

从客户端访问拼写检查工具服务

使用 TextView 视图的应用会从拼写检查自动获益,因为 TextView 会自动使用拼写检查工具。下面的屏幕截图说明了这一点:


图 2. TextView 中的拼写检查。

不过,在其他情况下,不妨直接与拼写检查工具服务进行互动。下图显示了与拼写检查工具服务互动的控制流程:

图 3. 与拼写检查工具服务互动。

Android 开源项目中的 LatinIME 输入法包含拼写检查的示例。