Android平台提供了一个拼写检查框架,可让您在应用程序中实现和访问拼写检查。 该框架是Android平台提供的文本服务API之一。
要在应用程序中使用框架,您可以创建一种特殊类型的Android服务,生成拼写检查器会话对象。 根据您提供的文本,会话对象返回由拼写检查器生成的拼写建议。
一、拼写检查生命周期
下图显示了拼写检查服务的生命周期:
图1.拼写检查服务生命周期。
要启动拼写检查,您的应用程序将开始执行拼写检查服务。 您的应用程序中的客户端(如活动或单个UI元素)会从服务中请求拼写检查器会话,然后使用会话获取文本建议。 当客户端终止其操作时,它关闭其拼写检查器会话。 如有必要,您的应用程序可以随时关闭拼写检查服务。
二、实施拼写检查服务
要在应用程序中使用拼写检查器框架,请添加包含会话对象定义的拼写检查器服务组件。 您还可以向您的应用添加一个控制设置的可选活动。 您还必须添加描述拼写检查服务的XML元数据文件,并将相应的元素添加到清单文件中。
一)、拼写检查类
使用以下类定义服务和会话对象:
1、SpellCheckerService的子类
SpellCheckerService同时实现了Service类和拼写检查框架界面。 在您的子类中,您必须实现以下方法:
将SpellCheckerService.Session对象返回给要进行拼写检查的客户端的工厂方法。
请参阅拼写检查服务示例应用程序,以了解有关实现此类的更多信息。
2、一个SpellCheckerService.Session的实现
拼写检查服务提供给客户端的对象,让他们将文本传递给拼写检查器并接收建议。 在这个类中,您必须实现以下方法:
由系统调用以响应createSession()。 在此方法中,您可以根据当前语言环境等进行初始化SpellCheckerService.Session对象。
onGetSentenceSuggestionsMultiple()
实际拼写检查。 此方法返回一个SentenceSuggestionsInfo数组,其中包含传递给它的句子的建议。
或者,您可以实现onCancel(),它处理取消拼写检查的请求,onGetSuggestions()处理一个单词建议请求,或onGetSuggestionsMultiple(),它处理批次的建议请求。
请参阅拼写检查客户端示例应用程序,以了解有关实现此类的更多信息。
注意:您必须将拼写检查的所有方面实现为异步和线程安全。 拼写检查器可以由运行在不同内核上的不同线程同时调用。 SpellCheckerService和SpellCheckerService.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输入法编辑器还包含拼写检查的示例。